根据docs:
窗口标志是类型(例如 Qt::Dialog)和零或
对窗口系统的更多提示(例如 Qt::FramelessWindowHint)。
如果小部件的类型为 Qt::Widget 或 Qt::SubWindow 并成为
窗口(Qt::Window、Qt::Dialog 等),它被放在位置 (0, 0) 上
桌面。如果小部件是一个窗口并变成一个 Qt::Widget 或
Qt::SubWindow,它被放置在相对于其父级的位置 (0, 0)
小部件。
因此,这些标志用于改变小部件的行为,例如将其转换为窗口、对话框、工具提示等。
在docs中给出了以下列表:
Qt::Widget:这是默认的
QWidget 的类型。这种类型的小部件是子小部件,如果它们有
一个父窗口,如果它们没有父窗口,则为独立窗口。也可以看看
Qt::Window 和 Qt::SubWindow。
Qt::Window:表示
小部件是一个窗口,通常带有一个窗口系统框架和一个标题
栏,无论小部件是否有父级。注意
如果小部件没有
父母。
Qt::Dialog :Window 表示小部件是一个
应装饰为对话框的窗口(即,通常没有
标题栏中的最大化或最小化按钮)。这是默认设置
QDialog 的类型。如果你想把它用作一个模态对话框,它应该
从另一个窗口启动,或者有一个父窗口并与
QWidget::windowModality 属性。如果将其设为模态,则对话框
将阻止应用程序中的其他顶级窗口获取
任何输入。我们将具有父级的顶级窗口称为
辅助窗口。
Qt::Sheet: Window 表示
window 是一个 Macintosh 工作表。由于使用工作表意味着窗口
模态,推荐的方式是使用QWidget::setWindowModality(),
或 QDialog::open(),而不是。
Qt::Drawer:窗口表示
该小部件是 Macintosh 抽屉。
Qt::Popup : Window 表示小部件是弹出式顶层窗口,即
它是模态的,但有一个适合弹出窗口的窗口系统框架
菜单。
Qt::Tool: Window 表示这个小部件是一个
工具窗口。工具窗口通常是一个小于
常用的标题栏和装饰,通常用于工具的集合
纽扣。如果有父级,工具窗口将始终保持打开
最重要的是。如果没有父母,您可以考虑使用
Qt::WindowStaysOnTopHint 也是如此。如果窗口系统支持它,一个
工具窗口可以用较轻的框架装饰。它可以
也可以与 Qt::FramelessWindowHint 结合使用。
在 Mac OS X 上,工具窗口对应于 Floating 类窗口。
这意味着窗口位于普通窗口之上;它
不可能在它上面放一个普通的窗口。默认情况下,工具
当应用程序处于非活动状态时,窗口将消失。这可以是
由 Qt::WA_MacAlwaysShowToolWindow 属性控制。
Qt::ToolTip:Window 表示小部件是一个
工具提示。这在内部用于实现工具提示。
Qt::SplashScreen: Window 表示窗口是一个
闪屏。这是 QSplashScreen 的默认类型。
Qt::Desktop:Window 表示这个小部件是
桌面。这是 QDesktopWidget 的类型。
Qt::SubWindow:表示这个widget是一个子窗口,
例如 QMdiSubWindow 小部件。
在您的情况下,我们必须将Qt::Dialog 的行为更改为Qt::Widget,在下面的代码中,我展示了执行此操作的代码:
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle("My own MainWindow")
self.fileDialog = QFileDialog(self)
self.fileDialog.setOption(QFileDialog.DontUseNativeDialog)
self.fileDialog.setWindowFlags(Qt.Widget)
self.confirmAction = QPushButton("Press me", self)
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.fileDialog)
mainLayout.addWidget(self.confirmAction)
self.setLayout(mainLayout)
截图: