Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 处理和触发从QML到C+的事件+;维切维萨呢_C++_Qt_Events_Qml - Fatal编程技术网

C++ 处理和触发从QML到C+的事件+;维切维萨呢

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>

我正在使用Qt,在windows8.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();
}
我想要什么 我需要的是,当一个按钮从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"