我正在使用 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 时。这可能吗?,你能给我看一个简单而实用的例子吗?
谢谢!
最佳答案
错误是因为编译器不知道QQuickItem
是什么。您需要包含它:
#include <QQuickItem>
例如,QQuickItem
仅在 QQuickView
的 header 中进行前向声明,因此您不能依赖它来包含 QQuickItem
对你来说,无论如何都不应该。
此外,关于 moc 不能与 main.cpp 中定义的类一起工作的评论是错误的;你只需要在你的类定义之后包含 main.moc
就可以让 QObject 工作:
#include "main.moc"
我不喜欢这个神话,因为它把简短的片段和示例变成了三个文件,而实际上它们可以包含在一个文件中,这在 Stack Overflow、bug 跟踪器等方面更有用。:)
关于c++ - 处理和触发从 QML 到 C++ 的事件,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238364/