5

(編集済み) 元の質問では、GridView が 2 次元モデルをネイティブに使用すると誤って想定していました。実際、他の QML ビューと同様に要素のリストを取ります。質問と回答をより理解しやすくするために、指定されたコードを少し変更しました。さらに、回答に基づいて作業ソリューションを追加しました。

メイン プログラムでは、QStandardItemModel のインスタンスを定義します。

QScopedPointer<QApplication> app(createApplication(argc, argv));
QmlApplicationViewer viewer;

QStandardItemModel* cppmodel = new QStandardItemModel();
for (int i=0; i<100; i++) {
    QStandardItem* item = new QStandardItem(QString("%1").arg(i,2,10,QChar('0')));
    cppmodel->appendRow(item);
}

次に、モデルを QML に登録します。

viewer.rootContext()->setContextProperty("cppModel",cppmodel);

QStandardItemModel はテーブルですね。次に、単純な GridView でアイテムを表示するデリゲートを作成するにはどうすればよいですか。

    GridView {
        model: cppModel
        delegate: Rectangle {
            Text { text: ??? } //WHAT MUST BE USED HERE ???
        }
    }

名前付きロールを使用する必要がありますか、それとも適切に作成されたインデックスを使用できますか?

4

3 に答える 3

7

多分それはあなたを助ける:
QML で QStandardItemModel を使用する

また、そのようなコードを試すこともできます:

GridView {
   anchors.fill: parent
   model: cppModel
   delegate: Rectangle {
      Text {
         text: display;
      }
   }
}
于 2012-08-23T13:12:58.633 に答える
5

この質問は 3 か月前のものなので、おそらく既に答えを持っているでしょうが、他の人を助けるために:

簡単な答えは、次を使用することです。

datalist.currentIndex = index;

たとえば、ListView を使用すると、これはうまくいきました。

ListView {
    id: datalist
    model: cppModel
    delegate: Rectangle {
        Text {
             text: display;
        }
    }
}

...

MouseArea {
    anchors.fill: parent;
    onClicked: {
        datalist.currentIndex = index;
    }
}

これは誰もが必要とするもののように思えましたが、ListView の例のいずれにも見つかりませんでした。

于 2012-11-07T22:24:02.533 に答える
1

これは、ソリューションの完全で実用的な例です。助けてくれてありがとう。

=== cppmodel.h ===

#include <QtDeclarative>

class CppModel : public QStandardItemModel
{
private:
    Q_OBJECT
public:
    explicit CppModel(QObject *parent = 0) : QStandardItemModel(parent) {}
public slots:
    void setDataInModel(const int i, const QString& txt) {
        setItem(i,new QStandardItem(txt));
    }
};

=== main.cpp ===

#include <QtDebug>
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include "cppmodel.h"

Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QScopedPointer<QApplication> app(createApplication(argc, argv));
    QmlApplicationViewer viewer;

    CppModel* cppmodel = new CppModel();
    for (int i=0; i<100; i++) {
        QStandardItem* item = new QStandardItem(QString("%1").arg(i,2,10,QChar('0')));
        cppmodel->appendRow(item);
    }

    viewer.rootContext()->setContextProperty("cppModel",cppmodel);

    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer.setMainQmlFile(QLatin1String("main.qml"));
    viewer.showExpanded();
    return app->exec();
}

=== main.qml ===

import QtQuick 1.1
import com.nokia.meego 1.0

PageStackWindow {
    id: appWindow    
    initialPage: mainPage    
    Page {
        id: mainPage    
        GridView {
           anchors.fill: parent
           model: cppModel
           delegate: Rectangle {
              height: itemText.height;
              width: itemText.width;
              Text {
                 id: itemText
                 text: display;
              }
              MouseArea {
                  anchors.fill: parent;
                  onClicked: {
                      console.log("Clicked: "+index)
                      cppModel.setDataInModel(index,"XX")
                  }
              }
           }
        }
    }
}
于 2012-12-19T09:22:04.117 に答える