私はオプションダイアログをプログラムのメインウィンドウ(これはQMainWindowです)の上にとどめるためにQtを使用しようとしています。 QDialogは完璧なフィット感のようでしたが、メインウィンドウをクリックすると前面に戻ります。しかし、私は2つの小さな例を作ることができました:一つは動作し、もう一つは(私の実際のアプリケーションから派生しています)です。私はこれらの2つの例の間で何が違うのかを知りません。QDialogは親のQMainWindowの上にとどまりません
次の例のオプションウィンドウは、メインウィンドウの上部にとどまる:
test.cpp
#include <QApplication>
#include <QMainWindow>
#include <QDialog>
int main(int argc, char *argv[])
{
QApplication test(argc, argv);
QMainWindow *mainWindow = new QMainWindow;
mainWindow->show();
QDialog * optionsWindow = new QDialog(mainWindow);
optionsWindow->show();
return test.exec();
}
test.pro
TEMPLATE = app
TARGET = test
INCLUDEPATH += .
QT = core gui widgets
SOURCES += test.cpp
オプションのw
TestApp.cpp
#include <QApplication>
#include "MainWindow.hpp"
int main(int argc, char *argv[])
{
QApplication testAppGUI(argc, argv);
MainWindow *mainWindow = new MainWindow();
mainWindow->show();
return testAppGUI.exec();
}
MainWindow.hpp
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QMainWindow>
#include "OptionWindow.hpp"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0)
{
optionWindow = new OptionWindow(this);
optionWindow->show();
}
OptionWindow *optionWindow;
};
#endif
OptionsWindow.hpp
#ifndef OPTIONWINDOW_HPP
#define OPTIONWINDOW_HPP
#include <QDialog>
class OptionWindow : public QDialog
{
Q_OBJECT
public:
explicit OptionWindow(QWidget *parent = 0){}
};
#endif
次の例ではindowは、メインウィンドウの上部にない滞在を行います
TEMPLATE = app
TARGET = TestApp
INCLUDEPATH += .
QT = core gui widgets
HEADERS += MainWindow.hpp \
OptionWindow.hpp
SOURCES += TestApp.cpp
This SO answer QDialogに私は親を与える示唆しています。 Qt::Tool
フラグの設定についても言及していますが、私の問題は解決できませんでした(上記の動作例では使用していません)。
This other answerは、QDockWidgetの使用を提案していますが、私の望むビジュアルスタイルや予想される動作を満たしていません。
言えば、ここで私は私のオプション]ダイアログボックスの期待するものです。
- オプションウィンドウは常にメインウィンドウの上にではなく、他のアプリケーションである必要があります。
- メインウィンドウのみがタスクバーに表示されます。
- メインウィンドウを最小化するとオプションウィンドウも最小限に抑えられ、復元するとオプションウィンドウ(メインウィンドウの上部)も復元されます。
- オプションウィンドウが開いている場合でも、メインウィンドウは有効なはずです。
Linux Lite 3.4では、QMake 3.1、Qt 5.8.0、g ++ 5.4.0、Xfce 4.12を使用しています。
最初の点:ああ、はい、これは私が可能な限り小さな例を作ろうとしたときに間違いです。残念です。 2点目:**動作します!**私はまだこの説明を読むことに非常に関心がありますが、その間に、ありがとうございます。私はこの答えを喜んで受け入れました。 – juef
2番目のポイントは、ウィンドウマネージャまたはQtバージョンに関連しているようです。 [この例](https://pastebin.com/Jfs9352m)は、Qt5.6.1/MSVC2013/Windows7上で実行された場合、すべてのOP条件を満たします。できるだけ多くのプラットフォームで試してみます。 – Mike
この例は私のシステム上の条件を満たしていないので、あなたは正しくなければなりません。元の記事を編集して、Linux Lite 3.4でXfce 4.12を使用していることを追加しました。ご意見ありがとうございます。 – juef