我使用QDialog
。在构造函数中,我设置了setWindowFlags(Qt::Window)
。在Linux/KDE上,效果是对话框获得了自己的窗口栏按钮,并且可以位于其父窗口(主窗口(后面。这就是我想要的。
然而,在Windows上,对话框没有自己的窗口栏按钮,它总是位于主窗口的顶部。有可能在Windows上实现与我在Linux上相同的行为吗?
我玩了Qt::WindowStaysOnTopHint
窗口标志,但没有效果。
将一个NULL父级传递给您的QDialog,然后它独立于您的主窗口,可以位于主窗口后面。
然后在主窗口的closeEvent((函数中,调用myDialog->close((。这将在主窗口退出时关闭对话框。
通过将其this指针发送到对话框构造函数来设置对话框父级。例如,如果您正在显示一个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)"));
我也遇到了同样的问题。我发现,如果使用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)