C++ 处理和触发从QML到C+的事件+;维切维萨呢
我正在使用Qt,在windows8.1上使用最新版本的Qt-Creator。完成GUI后,我尝试用C++与QML元素进行通信,反之亦然,即从两侧发送数据C++ 处理和触发从QML到C+的事件+;维切维萨呢,c++,qt,events,qml,C++,Qt,Events,Qml,我正在使用Qt,在windows8.1上使用最新版本的Qt-Creator。完成GUI后,我尝试用C++与QML元素进行通信,反之亦然,即从两侧发送数据 我试过的例子 我不知道如何做到这一点,然后我转发阅读官方文件和从这个网站的例子,但没有人为我工作 代码: #include <QQmlApplicationEngine> #include <QDebug> #include <QObject> #include <QGuiApplication>
我试过的例子 我不知道如何做到这一点,然后我转发阅读官方文件和从这个网站的例子,但没有人为我工作 代码:
#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();
}
我想要什么
我需要的是,当一个按钮从QML被按下时,某些数据被请求给C++,并且当它们准备好发送到QML时。这可能吗?你能给我一个简单实用的例子吗
谢谢 错误是因为编译器不知道什么是
QQuickItem
。您需要包括:
#include <QQuickItem>
我不喜欢这个神话,因为它将短片段和示例转换为三个文件,而它们可以只包含在一个文件中,这在堆栈溢出、bug跟踪器等方面更有用:)大多数人第一次使用Qt时遇到的第一个陷阱是,它们的Q_对象与主对象位于同一个模块中()。这样,“moc”编译器(元对象编译器)就不会创建所有特定于qt的信号槽元代码,您的东西也不会工作。将MyClass移动到头文件,将实现移动到相应的.cpp文件,您将“重新投入工作”.但现在我无法查看mt元素,只有一个带有白色背景的窗口background@TomásJuárez它确实有效,OP只是缺少了#在.cpp文件的末尾包含“main.moc”。它不显示我的QML元素;如果我使用QApplication app(argc,argv);
QQmlApplicationEngine;engine.load(qrl(QStringLiteral(“qrc:/main.QML”));return app.exec();
在main函数中它可以工作,但在我的示例中它可以运行file:///C:/Users/Tomi/build-qml-Desktop_Qt_5_4_0_MinGW_32bit-Debug/main.qml:找不到文件
,为什么?也许他们应该指出它…在典型的“首次用户”页面上,例如根本没有提到它。@user2225104您是说“包括”吗“main.moc"事情?你链接到的页面实际上与此无关,但是如果你能找到另一个你认为新用户可能会看到的页面,请告诉我,我会写一个补丁,添加一段解释它。@TomásJuárez,我不知道,你必须发布更多的代码。也许只是问一个关于下一个错误的新问题-你的原始示例不使用QQmlApplicationEngine,所需的编辑将使原本整洁的问题变得相当混乱。
#include <QQuickItem>
#include "main.moc"