質問

私は、ユーザが第2のモニタを使用していないときに、第2のモニタ上でスライドショーを表示するにはQtライブラリを使用しています。例えば、ユーザが第1のモニタにゲームをプレイし、第二のモニタでスライドショーを示している。

問題は、私はQtの中に新しいウィンドウを開いたとき、それは自動的に以前のアプリケーションからフォーカスを盗むことです。これを防ぐためにどのような方法がありますか?

役に立ちましたか?

解決

これは、それを見つけるために私にしばらく時間がかかったが、私はそれを見つけた:setAttribute(Qt::WA_ShowWithoutActivating);

これは、アクティブにしないように、ウィンドウを強制します。 Qt::WindowStaysOnTopHintフラグと

他のヒント

あなたは、フローティングプレビューボックス/他のウィジェットを作成したい場合は、

だけ

の下に使用します
thumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);

Qtの::ツールはそれを動作させるための重要なフラグです。私はフォーカスを盗んでいない意味ます。

ウィジェットは、デフォルトでフォーカスを受け付けませんが、おそらくあなたは、プレーンなウィジェットを作成していませんか?それはどのサブクラスでしたか? QMainWindowまたは他の何か?

これは、フォーカスを受け入れるまで、ウィンドウのサブクラスのデフォルトはそうはQWidget ::ショー()。

を呼び出す前にNoFocus ::のQtとのQWidget :: setFocusPolicyを呼び出して、明示的に試すことができます

また、任意の時点で、ウィンドウまたはそのウィジェットのいずれかにあなたが呼び出していないことを確認のQWidget :: activateWindow()を行います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top