(编辑)在原始问题中,我错误地认为GridView本身使用二维模型。实际上,它需要与其他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 ???
}
}
我是否必须使用命名角色,或者我可以使用正确创建的索引吗?
答案 0 :(得分:5)
也许它会帮助你:
Using QStandardItemModel in QML
你也可以尝试这样的代码:
GridView {
anchors.fill: parent
model: cppModel
delegate: Rectangle {
Text {
text: display;
}
}
}
答案 1 :(得分: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示例中找到它。
答案 2 :(得分: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")
}
}
}
}
}
}