2017-11-05 15 views
1

私はQT5でC++を使用してGUIアプリケーションを作成しています。私はすべてのウィンドウが正面にないと仮定して(つまり、別のアプリケーションにalt-tabしたか、すべて最小化している)、いくつかのウィンドウのいずれかにalt-tabすれば私のアプリのウィンドウは、すべての前面に来て、目に見える必要があります。どのように私はそれらのいずれかにalt - タブですべてのウィンドウを前面に強制することができますか?

+2

あなたがそれを表現する方法は、システムがどのように動作し、ユーザーが期待しているかに直接関係しているようです。なぜあなたはこれをしたいのですか?おそらく、その問題を解決する良い方法があります。 – hvd

+0

私のアプリには、FPGAが送信したパラメータを表示するためのメインウィンドウがあります(興味があれば、modbusを使ったシリアル通信より)。そして、ユーザが選択したものに基づいて、グラフなど私はそれらのすべてを同時に見ることができないようにしたいと考えています。私はすでにそれらを視覚的に重ならないように配置する方法を考え出しました。 – Numi

+0

これは、[MDI](http://doc.qt.io/qt-5/qtwidgets-mainwindows-mdi-example.html)や[ドックウィジェット](http://doc.qt。io/qt-5/qtwidgets-mainwindows-dockwidgets-example.html)が適合し、問題を完全に回避するでしょう。 – hvd

答えて

1

キー用語は「一時的なウィンドウ」です。ダイアログボックスを、こうした:私はX Window SystemではウィキペディアTransient (computer programming)

に(私のために適切な)説明がこれを見つけたそれは、他のウィンドウに属しており、それよりも長持ちない可能性がある場合、ウィンドウが他のウィンドウのための一時的なものと言われています警告メッセージとして一般的な例です。

IMHO、これはX11に限定されません。

Qtでは、親が別のウィンドウに設定されていると、ダイアログが一時的になります。

Iは、少量のサンプルを作った:

#include <QtWidgets> 

int main(int argc, char **argv) 
{ 
    qDebug() << "Qt Version: " << QT_VERSION_STR; 
    // main application 
    QApplication app(argc, argv); 
    // setup GUI 
    QWidget qWin; 
    QVBoxLayout qVBoxWin; 
    QLabel qLblWin(QString::fromUtf8("Main Window (QWidget)")); 
    qVBoxWin.addWidget(&qLblWin, 1); 
    qWin.setLayout(&qVBoxWin); 
    qWin.show(); 
#define MAKE_DIALOG(I) \ 
    QDialog qDlg##I; \ 
    qDlg##I.setWindowTitle(QString::fromUtf8("Dialog"#I)); \ 
    QVBoxLayout qVBoxDlg##I; \ 
    QLabel qLblDlg##I(QString::fromUtf8("Dialog"#I" (QDialog)")); \ 
    qVBoxDlg##I.addWidget(&qLblDlg##I, 1); \ 
    qDlg##I.setLayout(&qVBoxDlg##I) 
    // dialog 1 without parent 
    MAKE_DIALOG(1); 
    // dialog 2 with parent 
    MAKE_DIALOG(2); 
    qDlg2.setParent(&qWin, Qt::Dialog); 
#undef MAKE_DIALOG 
    qWin.show(); 
    qDlg1.show(); 
    qDlg2.show(); 
    // run-time loop 
    return app.exec(); 
} 

VS2013およびWindows 10上のQt 5.9.2(64ビット)でコンパイルして試験:

snapshot of testQMainWin-Dlgs

アプリケーションがメインで構成されウィンドウ(qWin)と2つのダイアログウィンドウ(qDlg1qDlg2)があります。

appearance of testQMainWin-Dlgs in the Windows 10 taskbar

(親ウィジェットを持っていないqDlg1)ダイアログ1は、Windows 10タスクバーの(メインウィンドウの横に)個別のエントリとして表示されます。ダイアログ2(qDlg2)は一時的なもので、表示されません。

snapshot of testQMainWin-Dlgs after Alt+Tab

ダイアログ1は、タスクの選択(Altキー + タブ)で別々に選択することができます。メインウィンドウを選択すると、メインウィンドウとダイアログ2が一番上に表示されます。これにより、ダイアログ2は常にメインウィンドウの上に表示されます。

注:

私はqDlg2.setParent(&qWin, Qt::Dialog);で2回目引数Qt::Dialogが必要であるかどうかわかりませんでした。それはそうです。 (私がそれをやめたとき、ダイアログ2はまったく見えなくなりました)

+0

の作品私は、ありがとう、たくさんの!答えだけでなく、その完全性 – Numi

関連する問題