首先,我创建了一个新的C++类,其中包含一个成员函数,该函数返回一个字符串:
#ifndef TESTNAME_H
#define TESTNAME_H
#include <QObject>
#include <QString>
#include <QVariant>
class testname : public QObject
{
Q_OBJECT;
public:
testname();
Q_INVOKABLE QString getName();
};
#endif // TESTNAME_H
#include "testname.h"
testname::testname()
{
}
QString testname::getName() {
return "sometext";
}
我有一个 QML 文件,中间只有一段文本,像这样:
import QtQuick 1.1
Rectangle {
width: 360
height: 360
Text {
id: text1
anchors.centerIn: parent
text: testqml
font.pixelSize: 12
}
}
请注意,属性“text”是名为“testqml”的变量。此变量包含上述类的函数返回的字符串。此代码位于main.cpp中:
#include <QApplication>
#include "qmlapplicationviewer.h"
#include <testname.h>
#include <QDeclarativeContext>
#include <QDebug>
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
// Create instance of "testname"
testname *test = new testname;
QmlApplicationViewer viewer;
viewer.rootContext()->setContextProperty("testqml", test->getName());
viewer.addImportPath(QLatin1String("modules"));
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/classtest/main.qml"));
viewer.showExpanded();
return app->exec();
}
使用setContextProperty函数,返回的字符串将暴露给qml文件,并在运行程序中正确显示。但我实际上想继承一个用于GridView的模型。因此,我在QML中创建了一个带有一个列表元素的GridView:
import QtQuick 1.1
Rectangle {
width: 360
height: 360
GridView {
id: grid_view1
anchors.centerIn: parent
width: 140
height: 140
cellHeight: 70
delegate: Item {
x: 5
height: 50
Column {
spacing: 5
Rectangle {
width: 40
height: 40
color: colorCode
anchors.horizontalCenter: parent.horizontalCenter
}
Text {
x: 5
text: name
anchors.horizontalCenter: parent.horizontalCenter
font.bold: true
}
}
}
model: ListModel {
ListElement {
name: testqml
colorCode: "grey"
}
}
cellWidth: 70
}
}
变量“testqml”现在在列表的“name”字段中,该字段是一个字符串。如果我使用一个像“likethis”这样的字符串,它会正确显示。但是,如果我运行我的程序(main.cpp和class保持不变),我会得到以下错误:
ListElement: cannot use script for property value
name: testqml
^
我现在遇到了困难。我找到了一个类似的问题#QTBUG-16289并报告了错误,但我不知道如何解决我的问题。有什么想法、教程或其他东西可以帮助我解决问题吗?
谢谢和问候 :)