处理和触发从 QML 到 C++ 的事件,反之亦然
Handle and trigger events from QML to C++ and viceversa
我正在使用 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 中的 forward-declared,因此您不能依赖它包含 QQuickItem
你,无论如何都不应该。
此外,关于 moc 不能与 main.cpp 中定义的 classes 一起工作的评论是错误的;你只需要在你的 class 定义之后包含 main.moc
就可以让 QObject 工作:
#include "main.moc"
我不喜欢这个神话,因为它把简短的片段和示例变成了三个文件,而它们本来可以只包含在一个文件中,这在 Stack Overflow、bug 跟踪器等方面更有用。:)
我正在使用 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 中的 forward-declared,因此您不能依赖它包含 QQuickItem
你,无论如何都不应该。
此外,关于 moc 不能与 main.cpp 中定义的 classes 一起工作的评论是错误的;你只需要在你的 class 定义之后包含 main.moc
就可以让 QObject 工作:
#include "main.moc"
我不喜欢这个神话,因为它把简短的片段和示例变成了三个文件,而它们本来可以只包含在一个文件中,这在 Stack Overflow、bug 跟踪器等方面更有用。:)