QDialog:如何在Windows上启用位于父级(主窗口)后面的功能?

时间:2018-12-01 16:40:19

标签: c++ qt qt5 qdialog

我使用QDialog。在构造函数中,我设置了setWindowFlags(Qt::Window)setWindowFlags(Qt::Window)。在Linux / KDE上,效果是对话框获得了它自己的窗口栏按钮,并且可以在其父窗口(主窗口)后面。那就是我想要的。

但是,在Windows上,该对话框没有自己的窗口栏按钮,并且始终位于主窗口的顶部。在Windows上是否可以实现与在Linux上相同的行为?

我在玩Qt::WindowStaysOnTopHint窗口标志,但没有效果。

3 个答案:

答案 0 :(得分:1)

向QDialog传递一个NULL父对象,然后它独立于您的主窗口,并且可以位于主窗口后面。

然后在主窗口的closeEvent()函数中,调用myDialog-> close()。当您的主窗口退出时,这将关闭对话框。

答案 1 :(得分:0)

通过将其指针发送给对话框构造函数来

设置对话框父。例如,如果您正在显示QFileDialog来保持最高使用率

QFileDialog::getOpenFileName(this,
    tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));

而不是:

QFileDialog::getOpenFileName(NULL,
    tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));

答案 2 :(得分:0)

我有同样的问题。我发现,如果您使用StaysOnTopHint,则对话框甚至会位于其他窗口(不仅是主应用程序窗口)的顶部。这帮了我大忙。该代码使用Python,但应易于转换为C ++。这里self.parent是应用程序主窗口。

        if staysOnTop:
            dialog.setParent(self.parent, Qt.Dialog | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint)
        else:
            dialog.setParent(None, dialog.windowFlags() & ~Qt.WindowStaysOnTopHint)