我正在使用Qt,在Windows 8.1上使用最新版本的Qt Creator。一旦我完成了GUI,我就尝试用C ++来传达我的一些QML元素,反之亦然,即从双方发送数据。
我不知道该怎么做,然后我转发阅读本网站的官方文档和示例,但没有人适合我。
代码:
#include <QQmlApplicationEngine>
#include <QDebug>
#include <QObject>
#include <QGuiApplication>
#include <QQuickView>
class MyClass : public QObject
{
Q_OBJECT
public slots:
void cppSlot(const QString &msg) {
qDebug() << "Called the C++ slot with message:" << msg;
}
};
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QObject *item = view.rootObject();
MyClass myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)),
&myClass, SLOT(cppSlot(QString)));
view.show();
return app.exec();
}
但是我收到了一个错误:
C:\Users\Tomi\qml\main.cpp:20: error: cannot convert 'QQuickItem*' to 'QObject*' in initialization
QObject *item = view.rootObject();
我需要的是,当从QML按下按钮时,会请求某些数据到C ++,以及何时可以将它们发送到QML。这有可能吗?你能告诉我一个简单而实用的例子吗?
谢谢!
答案 0 :(得分:2)
错误是因为编译器不知道QQuickItem
是什么。你需要包括它:
#include <QQuickItem>
例如, QQuickItem
仅在QQuickView
标题中向前声明,因此您无法依赖它来为您添加QQuickItem
,并且无论如何都不应该。
此外,关于moc不能使用main.cpp中定义的类的注释是错误的;你需要在你的类定义之后包含main.moc
才能使QObject工作:
#include "main.moc"
我不喜欢这个神话,因为它将简短的片段和示例转换为三个文件,当它们只包含在一个文件中时,这在Stack Overflow,bug跟踪器等方面更有用:)