Qt错误:发出信号QDeclarativeEngine :: quit(),但没有连接接收器来处理它

时间:2012-05-01 15:08:47

标签: c++ qt qml

我对Qt很新,因此我无法弄清楚一些Qt问题。如果有人可以帮助我,我将非常感激。

我试图摆脱应用程序窗口的框架并在qml中创建一个退出按钮以退出应用程序。因此,我制作了如下程序:

的main.cpp

 #include <QtGui/QApplication>
 #include <QDeclarativeContext>
 #include <QObject>
 #include "qmlapplicationviewer.h"
 #include "myclass.h"
 #include "mainwindow.h"

 Q_DECL_EXPORT int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     MyClass myClass;
     MainWindow window;

     window.rootContext()->setContextProperty("myObject", &myClass);
     window.show();

     return app.exec();
 }

mainwindow.cpp

 #include "mainwindow.h"

 MainWindow::MainWindow(QWidget *parent) : QDeclarativeView(parent)
 {
     // No window decorations
     setWindowFlags(Qt::FramelessWindowHint);

     // Set QML file
     setSource(QUrl::fromLocalFile("qml/Test2/main.qml"));
 }

 // Destructor.
 MainWindow::~MainWindow()
 {
 }

myclass.cpp

 #include <QDeclarativeEngine>
 #include <QDeclarativeComponent>
 #include <QDeclarativeContext>
 #include <stdio.h>
 #include "myclass.h"

 MyClass::MyClass()
 {
     click_count = 0;
 }

 int MyClass::click_function(void)
 {
     click_count++;
     fprintf(stderr, "CLICK COUNT in CPP: %d\n", click_count);
     return click_count;
 }

QML

 MouseArea {
     id: mouse_exit
     anchors.fill: parent
     onClicked: {
         console.log("Click on exit button: ")
         console.log("click count: ", myObject.click_function())
         Qt.quit();
     }
 }

它成功编译,但是,每当我点击退出按钮时,Qt错误“信号QDeclarativeEngine :: quit()发出,但没有连接到处理它的接收器”。根据我在网上搜索这个问题,似乎我必须将QDeclarativeEngine :: quit()信号连接到QApplication :: quit()插槽。但是使用connect()函数的信息并不多。我尝试了很多方法来使用connect(),但我仍然不知道如何在这种情况下使用它。

有人可以帮我解决这个问题吗?我真的很感激!

1 个答案:

答案 0 :(得分:2)

语法为:

connect(sender, SIGNAL(signalName(args)), receiver, SLOT(slotName(args)));

您可以将它放在MyClass构造函数中:

connect(this, SIGNAL(quit()), qApp, SLOT(quit()));

或者在main函数中,因为connect()是一个静态函数,正如Slavic81在下面的注释中指出的那样。

请注意,qApp是全局应用程序的宏。