gpt4 book ai didi

c++ - 处理和触发从 QML 到 C++ 的事件,反之亦然

转载 作者:行者123 更新时间:2023-11-28 02:33:45 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com