ちょっとした詰まり処で分かったことも書いていっていいんじゃないかな…。
「もう、こんなんくだらないことだから出さなくていいよ」
みたいなことでも出していったらいいんじゃないかな。
たくさん出したらその中で一個か二個位は
役に立つもの出てくるもんじゃろ
で、QTのウィンドウを最前面に出すヤツ
C++とかMFCとかだとTopMostとかの設定で出来るヤツですね。
最近だとこの設定逆に邪魔だからなのか
あんまり見つかんなかったもんで、書いておこうと思います。
________________________________
どうすれば最前面に表示できる?
最前面に出すには該当のウィンドウに「setFlag」で
「Qt::WindowStaysOnTopHint」を有効にします。
分かれば簡単そうですね!
________________________________
フラグの種類
このフラグには他にウィンドウのスタイルを変更するとかの
設定を行うことが出来るみたいですね。
Qt::MsWindowsFixedSizeDialogHint
ウィンドウ境界線を表示するQt::FramelessWindowHint
フレームのないウィンドウにするQt::CustomizeWindowHint
タイトル部分の設定を無効にするQt::WindowTitleHint
ウィンドウのタイトル部分を追加(表示)するQt::WindowMinimizeButtonHint
ウィンドウの最小化ボタンを追加(表示)するCustomizeWindowHintと使うと非活性になる
Qt::WindowMaximizeButtonHint
ウィンドウの最大化ボタンを追加(表示)するCustomizeWindowHintと使うと非活性になる
Qt::WindowCloseButtonHint
ウィンドウの閉じるボタンを追加(表示)するQt::WindowSaysOnTopHint
ウィンドウが常に最前面で表示されるQt::WindowSaysOnBottomHint
ウィンドウが常に最背面で表示される________________________________
セットするWindowの取得方法
問題はどっから呼ぶのか、ですよね。
ここの情報がなかなか引っかからないもんで、詰まってしまいました。
QtのStaticメソッドから取得できるので、それを使用しましょう。
QApplication::AllWindowsからQtアプリケーションのウィンドウを取得できます。
MDIとかの場合だとここで幾つかウィンドウが取れるのだと思います(適当)
自分のはSDIなので0番目で取得してます。
QApplication::allWindows[ 0 ]->setFlag( Qt::WindowSaysOnTopHint, true );
QApplication::allWindows[ 0 ]->setWindowState( Qt::WindowActive );
「最前面表示」設定と「アクティブにする」設定を行うようにしました。
セット時の詰まり処
なかなか思ったような動作になっていませんでした。
最前面に表示されねーじゃねーかとか思ってたんですが、
どうもこれ、アプリケーションのshow()とexec()の間で行う必要があるようです。
始めexec()しか使っておらず、実行時に表示されるようにしていたので、
設定が有効になっていなかったんですね。
というか、こんなのフォーラムにも書いてなかったけどな~
(setFlagsの方でなんかバグがあって正しく動かないみたいってのはあった)
app.show();
...(中略)
QApplication::allWindows[ 0 ]->setFlag( Qt::WindowSaysOnTopHint, true );
QApplication::allWindows[ 0 ]->setWindowState( Qt::WindowActive );
app.exec();
こんな感じでやるとexec()の後に
最前面で表示してくれます。
0 件のコメント:
コメントを投稿