4

私は 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();
 }

メインウィンドウ.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 エラー「Signal QDeclarativeEngine::quit() が発行されましたが、それを処理する受信者が接続されていません」が発生します。この問題をオンラインで検索したところ、QDeclarativeEngine::quit() シグナルを QApplication::quit() スロットに接続する必要があるようです。しかし、connect() 関数を使用するための情報はあまりありません。connect() を使用する方法をいろいろ試しましたが、この場合の使用方法はまだわかりませんでした。

誰でもこの問題を解決するのを手伝ってもらえますか? 本当に感謝します!

4

1 に答える 1

2

構文は次のとおりです。

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

MyClass コンストラクターに配置できます。

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

または、メイン関数でconnect()は、Slavic81 が以下のコメントで指摘したように、静的関数であるためです。

qApp はグローバル アプリケーションのマクロであることに注意してください。

于 2012-05-01T16:43:41.047 に答える