web-dev-qa-db-ja.com

フォーカスを奪うことなくQtでウィンドウを表示する

ユーザーが2番目のモニターを使用していないときに、Qtライブラリを使用して2番目のモニターにスライドショーを表示しています。例として、ユーザーが最初のモニターでゲームをプレイし、2番目のモニターでスライドショーを表示している場合があります。

問題は、Qtで新しいウィンドウを開くと、以前のアプリケーションからフォーカスが自動的に奪われることです。これを防ぐ方法はありますか?

39
dutchmega

見つけるのに少し時間がかかりましたが、見つけました:setAttribute(Qt::WA_ShowWithoutActivating);

これにより、ウィンドウがアクティブになりません。 Qt::WindowStaysOnTopHint 国旗

65
dutchmega

フローティングプレビューボックス/その他のウィジェットを作成する場合は、以下を使用してください

thumbnail = new QLabel;
thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
thumbnail->setParent(0);
thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);

Qt :: Toolは、それを機能させるための重要なフラグです。私は焦点を盗まないことを意味します。

7
Yash

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

ウィンドウのサブクラスがデフォルトでフォーカスを受け入れる可能性があるため、QWidget :: show()を呼び出す前に、Qwidget :: setFocusPolicyをQt :: NoFocusで明示的に呼び出してみてください。

また、ウィンドウまたはそのウィジェットでQWidget :: activateWindow()を呼び出していないことを確認してください。

3
Troubadour