標準の Windows メッセージ ループの実装Qt
に置き換えた場合、機能が失われますか? QApplication::exec()
これは私が何を意味するかを明確にする必要があります:
イベント処理を実行する通常の「Qt」の方法:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window w;
w.show();
return a.exec();
}
イベント処理を実行する「Windows」の方法:
#include <Windows.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window w;
w.show();
MSG msg;
while(GetMessage(&msg, 0, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
上記は、インスタンスに関する外部メッセージ ループがあることを示していQApplication
ますが、QApplication
インスタンス自体には独自のイベント ループさえありません。
言い換えれば、メッセージ ループとQt GUI およびインスタンスmain.exe
を含むプログラム (Qt について何も知らない) がある場合、Qt GUI のイベントを処理するために外部メッセージ ループを許可しても問題ありませんか? 前もって感謝します!.dll
QApplication
main.exe
編集 1: 誰かにとって役に立つ場合に備えて、私は自分自身に答えます: イベント ループ処理を実行する .NET の下で C# で記述されたメインの .exe モジュールがあり、Qt/C++ で記述された .dll がいくつかあります。 「内部」の GUI (および共有される QApplication インスタンス)。QApplication::exec() は呼び出されませんが、すべてのイベントはメインの .exe (.NET) モジュールのイベント ループによって正常にディスパッチされ、すべての Qt 機能(シグナル/スロット、スレッドなど)が存在します。
編集 2: Qt 4.8.2 では機能しましたが、Qt 5.1.0 では少し異なります。QApplication ::processEvents() は最初の呼び出しで初期初期化を実行するため、一度呼び出す必要があります ( GetMessage または PeekMessage に WindowsHook をインストールします)。その後、アプリケーション Qt イベントで GetMessage を呼び出す人は誰でもプロセスを取得し、あなたはゴールデンです:)