3

Qt を使用した既存のコードがたくさんあります。より具体的には、Qt シグナルと特定のアクションの時間を指定するスロットがあります。

Qt アプリケーションではない新しいアプリケーション内でこのコードを使用する必要があります (使用できません - Visual Studio にプラグインを作成しています)。とにかく、既存のコードを実際に信号を傍受して関連するスロットをアクティブにするにはどうすればよいですか?

どうにかしてダミーの Qt アプリケーションを作成する必要がありますか? もしそうなら、コードの残りの部分へのブロックループにならずにシグナルを処理するにはどうすればよいですか?

4

2 に答える 2

1

このように書くと、イベントループがなくても「Test」メッセージが出力されるようですので、これが手掛かりになるかもしれません:

#include <QObject>
#include <QCoreApplication>
#include <QDebug>

class MyClass : public QObject
{
    Q_OBJECT
    public:
        explicit MyClass(QObject *parent) : QObject(parent) {}
        void testMethod() { emit testSignal(); }

    signals:
        void testSignal();

    public slots:
        void testSlot() { qDebug() << "Test"; }
};

#include "main.moc"

int main(int argc, char **argv)
{
    // QCoreApplication coreApplication(argc, argv);
    MyClass myObject(0);
    QObject::connect(&myObject, SIGNAL(testSignal()), &myObject, SLOT(testSlot()));
    myObject.testMethod();
    // return coreApplication.exec();
    return 0;
}

この方法でも Qt は必要ですが、「ブロッキング」イベント ループを避けることができます。ただし、送信されたシグナルに対して実行する必要がある直接呼び出しの数に応じて、コードをシグナルスロットレイヤーから直接呼び出しに再配置する方が簡単な場合があります。

于 2014-04-06T11:08:11.557 に答える