フォーカスを盗むことなく、Qtの中にウィンドウを表示します
-
12-09-2019 - |
質問
私は、ユーザが第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()を行います。
所属していません StackOverflow