2011-01-07 11 views
0

サードパーティのアプリケーションにプラグインするためのDLLの中にQtアプリケーションをラップしています。これらのサードパーティアプリケーションがQtアプリケーションを起動すると、サードパーティアプリケーションのツールチップツールチップが機能しなくなります。私がQtアプリケーションを閉じるとすぐに、彼らは再び働きます。非Qtアプリケーションと同じプロセスでQtアプリケーションを読み込むQt以外のアプリケーションのツールチップが破損する

Qt以外の実行可能ファイル(この場合はすぐに使用できるMFC MDIアプリケーション)とQtアプリケーション(DLLに変更したもの)を作成することでVisual Studioで問題を再現しました。 Iは、非Qtの実行にメニュー項目を追加し、そして次のようにイベントを扱う:

void MFCApp::OnFileLaunch() 
{ 
    QtApp qtApp; 
    qtApp.Launch(); 
} 

QtAppクラスは(すべてでQtのAPIを公開し、起動しない)次のように実装されている:

int QtApp::Launch() 
{ 
    int argc = 0; 
    char *argv = 0; 
    QApplication a(argc, &argv); 
    MyMainWindow w; 
    w.show(); 
    return a.exec(); 
} 

Qtアプリケーションが表示されている間、非Qtアプリケーションは、ツールバーのツールチップ(およびSelect Allのキーボードショートカットなど)を除いて、完全に反応します。

私はこれがQtバグかもしれないと思っていますが、私の起動コードが間違っているかどうかをチェックしたいと思っていました。

私は途中でQt 4.5.2を使用しています。

ありがとうございました

答えて

0

Qt DLLを別のイベントループに入れる必要がありました。 Qt DLLには、ホストアプリケーションがデータを転送するために呼び出すことができる小さなAPIがあり、Qtイベントループを所有するスレッドのみがQt DLL内で動作するように、エントリ時にスレッドを切り替えただけです。

0

しないでください。 QApplicationは、正常に動作するためには、プロセス内の唯一のイベントループである必要があります。

+0

返信いただきありがとうございます。別々のプロセス以外に、私は多くの選択肢があるのか​​分からないのですか?私はサードパーティのアプリケーションを変更することはできませんし、Qt DLLには正確に1つのQApplicationオブジェクトが必要です。私はそれがワームの缶であることに同意しますが、それは第三者アプリケーションの他のすべての出来事についてちょうどうまくいくようです。ありがとう。 – Robin

0

私は答えはそのドキュメント言うQAbstractEventDispatcherクラス、にあると思う:

QAbstractEventDispatcherもQtのイベントループと外部のイベントループの統合が可能になります。たとえば、Motif Extension Qt Solutionには、QtとMotifイベントをマージするQAbstractEventDispatcherの再実装が含まれています。

これを調べます。ありがとう。

関連する問題