プラグインを開発したい場合、qt には大きな問題があります。ホスト アプリケーションが非 qt アプリケーション (多くのプログラム...) で、2 つまたは 3 つの GUI プラグインを追加したい場合、(私のように) 大きな問題が発生します。
問題は、1 つのプロセスに QApplication が 1 つだけ存在する必要があることです。(通常はメインで行われます) プラグインを作成する場合、ホスト アプリケーションを QApplication.exec() でロックする余裕はありません。
この場合、run() 関数で QApplication と exec を使用して QThread を作成できます。正常に動作します。しかし、これは元の問題を解決することはできません。ホストプロセスにQApplicationがあるため、2番目のプラグインにはQApplicationがありません。(共有メモリに Qapplication ポインタを与えることはオプションではありません...QWidget は GUI スレッドで作成する必要があるため...常に 1 つです...)
そして、あなたの質問に対する答えはここにあります。プラグインを 1 つだけ作成する場合は、QMetaObject::invokeMethod を使用できます。このコードはピックスマップをラベルに設定し、GUI を更新します。
QImage img;...
bool succ = QMetaObject::invokeMethod(mainWin, "DisplaySlot", Qt::QueuedConnection, Q_ARG(QImage, img));
public slot: を displayer ウィンドウに追加します。
void mainWinClass::DisplaySlot(QImage qim) {
(*(ui.label)).setPixmap(QPixmap::fromImage(qim));
(*(ui.label)).update();
}
お役に立てば幸いです。
誰かが私の問題の解決策を知っている場合...上記(ホストアプリケーションでqtを使用した複数のGUIプラグイン)を教えてください。