发布
社区首页 >问答首页 >QDialog不会一直站在父母QMainWindow的前面

QDialog不会一直站在父母QMainWindow的前面
EN

Stack Overflow用户
提问于 2017-05-06 17:51:22
回答 1查看 2K关注 0票数 1

我试图使用Qt来创建一个选项对话框,该对话框位于程序的主窗口(即QMainWindow)之上。QDialog看起来非常合适,但是点击主窗口会让它回到最前面。但是,我已经成功地做了两个很小的例子:一个是工作的,另一个不是(这是从我的实际应用程序派生出来的)。我不知道是什么使这两个例子的行为不同。

以下示例中的选项窗口停留在主窗口的顶部:

test.cpp

代码语言:javascript
代码运行次数:0
复制
#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

代码语言:javascript
代码运行次数:0
复制
TEMPLATE = app
TARGET = test
INCLUDEPATH += .
QT = core gui widgets 

SOURCES += test.cpp

下面示例中的选项窗口是而不是停留在主窗口的顶部:

TestApp.cpp

代码语言:javascript
代码运行次数:0
复制
#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

代码语言:javascript
代码运行次数:0
复制
#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

代码语言:javascript
代码运行次数:0
复制
#ifndef OPTIONWINDOW_HPP
#define OPTIONWINDOW_HPP

#include <QDialog>

class OptionWindow : public QDialog 
{
    Q_OBJECT
    public:
        explicit OptionWindow(QWidget *parent = 0){}
};

#endif

TestApp.pro

代码语言:javascript
代码运行次数:0
复制
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 3.4上使用QMake 3.1、Qt5.8.0、g++ 5.4.0和Xfce 4.12。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-06 18:35:50

几点..。

首先,您没有使用传递给parent ctor的OptionWindow参数:您需要.

代码语言:javascript
代码运行次数:0
复制
class OptionWindow: public QDialog {
  Q_OBJECT;
public:
  explicit OptionWindow (QWidget *parent = nullptr)
    : QDialog(parent) /* <-- Added */
  {}
};

我理解这个问题但是..。其次,在针对show调用show之前,您似乎需要确保调用父服务器上的QDialog

代码语言:javascript
代码运行次数:0
复制
class MainWindow: public QMainWindow {
  Q_OBJECT;
public:
  explicit MainWindow (QWidget *parent = nullptr)
    {
      optionWindow = new OptionWindow(this);
      show(); /* <-- Added */
      optionWindow->show();
    }
  OptionWindow *optionWindow;
};

这个问题我无法真正解释--对不起(虽然它可能是我的窗口管理器: fvwm的一个函数--我正在使用Qt5.8在Suse linux上)。也许其他人可以参与进来,我会更新的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43823628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档