所以,我做了一些搜索,我读过的类似问题都没有有效的建议。
我正在使用 Qt Creator(而且我对 Qt 不太熟悉)所以我不确定它在后台做了什么巫术。但是,我使用的是标准的 Qt Quick Application 项目。
本质上,我想从 QML 调用一个 C++ 函数,该函数返回一个字符串,该字符串定期替换布局中的某些文本。
这是main.cpp:
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include <QDeclarativeContext>
class testClass : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE QString gimmeText() {
return QString("new text");
}
};
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/Picenter2/main.qml"));
testClass t;
viewer.rootContext()->setContextProperty("testOb", &t);
viewer.showFullScreen();
return app->exec();
}
这是布局的一个片段(因为其中大部分显然无关紧要):
Text {
id: text1
x: 105
y: 156
color: "#ffffff"
text: qsTr("text")
font.pixelSize: 12
Timer {
interval: 1000; running: true; repeat: false
onTriggered: text1.text = testOb.gimmeText();
}
给出的错误是:
invalid use of incomplete type 'struct QDeclarativeContext' main.cpp (28)
forward declaration of 'struct QDeclarativeContext' qdeclarativeview.h (60)
编辑:包含 QDeclarativeContext 时,上述内容消失,出现以下错误:
(.text.startup+0x3e):-1: error: undefined reference to `vtable for testClass'
(.text.startup+0xcf):-1: error: undefined reference to `vtable for testClass'
(.text.startup+0x12b):-1: error: undefined reference to `vtable for testClass'
:-1: error: collect2: ld returned 1 exit status
我没有做过太多的 C++ 编程,所以我并不完全熟悉这意味着什么。遵循基本相同问题的建议只会给我 vtable 错误或更难以理解的东西。
真正让我困惑的是,查看头文件,QmlApplicationViewer 是从 QDeclarativeView 派生的,这正是 Qt 文档在这里用来做我想要的几乎完全一样的东西。感谢任何人的任何建议。