2017-08-23 13 views

答えて

0

誰かが興味を持っていれば、より迅速な回避策が見つかりました。次のコードでは、月曜日または日曜日に開始する週を考慮しています。

月の最初の日をチェックし、最初の週の月曜日/日曜日を取得してから、day = firstDay + XX goes from 0 to 42)を確認します。

function checkMonthlyCases(currentYear, currentMonth){ 
    var firstMonthDay = new Date(currentYear,currentMonth,1,0) 
    var firstVisibleDay = new Date(firstMonthDay.getTime() - (((firstMonthDay.getDay() === Locale.Sunday) ? Qt.Sunday : firstMonthDay.getDay()) - 1) * 86400000) 

    if(startDay == Qt.Sunday){ 
     firstVisibleDay = new Date(firstVisibleDay.getTime() - 86400000); 
    } 

    for(var i=0; i< 42; i++){ // 42: number of visible days 
     var checkDay = new Date(firstVisibleDay.getTime() + i*86400000) 
     var count = getDayCaseCount(checkDay) 
    } 
} 
2

(も表示されている次/前の月からのものも含めて)現在の月ビューのために目に見える日のリストを取得する方法はありますCalendarhere疑わしいプロパティ__modelが見つかります。我々は、それが常にcountの42 - 表示される日の量であることがわかります。

問題であり、私たちは役割e.t.c.を識別するために、データをフェッチするためにint代わりroleNamesのと闘争をQModelIndexを必要とするようQMLに私たちは本当に、QAbstractItemModel秒の子孫にアクセスできないことを
ListModelから知られているように、私たちはget(index)の機能を提供する小さなヘルパーを紹介する必要があります。このための基盤として、公開されていない方法で拡張するQIdentityProxyModelを使用できます。

qmlproxymodel.h

#ifndef QMLPROXYMODEL_H 
#define QMLPROXYMODEL_H 

#include <QObject> 
#include <QIdentityProxyModel> 
#include <QMap> 

class QMLProxyModel : public QIdentityProxyModel 
{ 
    Q_OBJECT 
public: 
    QMLProxyModel(QObject* parent = nullptr); 

public slots: 
    QMap<QString, QVariant> get(int row_index) const; 
}; 

#endif // QMLPROXYMODEL_H 

qmlproxymodel.cpp

#include "qmlproxymodel.h" 

QMLProxyModel::QMLProxyModel(QObject* parent) 
    : QIdentityProxyModel(parent) 
{ 

} 

QMap<QString, QVariant> QMLProxyModel::get(int row_index) const 
{ 
    QMap<QString, QVariant> ret; 
    QModelIndex ind = index(row_index, 0); 
    QHash<int, QByteArray> roles = roleNames(); 

    // for some reason the itemData-method always throw a index-out-of-range exception 
    for (int e : roles.keys()) { 
     ret.insert(roles.value(e), data(ind, e)); 
    } 

    return ret; 
} 

その後、我々は我々のmain.cppに

qmlRegisterType<QMLProxyModel>("QMLProxyModel", 1, 0, "QMLProxyModel"); 
にQMLにこの新しいタイプを登録210

は最後に、私たちはQMLでそれを使用する:

Calendar { 
    id: cal 
    anchors.fill: parent 
} 

QMLProxyModel { 
    id: pm 
    sourceModel: cal.__model 
    onDataChanged: console.log("Some Data has changed", pm.get(0).date) 
} 

ここでI出力モデル変更のデータはいつでも最初の表示される日付の日 - つまり、来月が選択されています。
QMLProxyModelのすべての(42)要素を反復処理するJS関数を記述して、任意のデータ構造にコンテンツを追加するのは簡単です。

+0

素晴らしいです!ありがとう! – laurapons

関連する問題