Qt 如何关闭模态窗口的非模态子窗口?

Qt 如何关闭模态窗口的非模态子窗口?,qt,modal-dialog,pyside,Qt,Modal Dialog,Pyside,使用PySide(Qt),我试图从模式窗口打开一个非模式窗口 模态窗口实际上在等待一个强制性的答案,它上面有一个图标,弹出一个帮助窗口,说明用户可以回答什么 在模式父级实际关闭之前,我无法找到关闭(非模式)帮助窗口的方法 是否有方法将子窗口设置为模态,同时仍保持其父模态?在下面的示例中,我将向您展示如何在模态对话框关闭之前或之后从模态对话框关闭另一个窗口。这并不十分困难,只需要在另一个窗口(您的帮助窗口)上调用close 例如: from PySide import QtCore, QtGui

使用PySide(Qt),我试图从模式窗口打开一个非模式窗口

模态窗口实际上在等待一个强制性的答案,它上面有一个图标,弹出一个帮助窗口,说明用户可以回答什么

在模式父级实际关闭之前,我无法找到关闭(非模式)帮助窗口的方法


是否有方法将子窗口设置为模态,同时仍保持其父模态?

在下面的示例中,我将向您展示如何在模态对话框关闭之前或之后从模态对话框关闭另一个窗口。这并不十分困难,只需要在另一个窗口(您的帮助窗口)上调用
close

例如:

from PySide import QtCore, QtGui

def start_modal_dialog():
    modal_dlg = QtGui.QDialog(main_window) # a modal dialog
    modal_dlg.setWindowTitle('Modal Dialog')
    modal_dlg.setFixedSize(200, 200)

    modeless_help_window = QtGui.QLabel('Explanations', modal_dlg, QtCore.Qt.Window) # a modeless help window
    modeless_help_window.setWindowTitle('Modeless Help Window')
    modeless_help_window.setFixedSize(200, 200)
    modeless_help_window.show()

    help_window_close_button = QtGui.QPushButton('Close Help window', modal_dlg)
    help_window_close_button.clicked.connect(modeless_help_window.close)

    modal_dlg.exec_() # execute the dialog

    modeless_help_window.close() # close the modeless help window after the modal dialog window is closed

app = QtGui.QApplication([]) # create app

main_window = QtGui.QMainWindow() # main window
main_window.setWindowTitle('Main Window')
main_window.setFixedSize(200, 200)
dlg_start_button = QtGui.QPushButton('Start Modal dialog', main_window) # add a button
dlg_start_button.clicked.connect(start_modal_dialog) # which shows the dialog
main_window.show()

app.exec_()
我有一个带按钮的主窗口。单击该按钮时,将启动一个模式对话框(QDialog的实例),但同时会显示一个无模式窗口(为简单起见,仅显示一个
QLabel
)。在模态对话框中还有一个按钮,如果单击该按钮,则关闭非模态窗口。此外,在执行该对话框后,无模式窗口将关闭(以防未按下按钮)

在这里,您可以看到关闭另一个窗口只需要调用
close
,但我还设置了一个层次结构。模态对话框是主窗口的子窗口,非模态(帮助)窗口是模态对话框的子窗口。如果没有它,它可能无法正常工作


您能给我们看一些代码吗?实际上,您所说的“有没有办法将子窗口设置为模态,同时仍保持其父模态?”是什么意思?@Marcvs谢谢。很高兴听到。如果您愿意,并且答案解决了您的问题,您也可以将其标记为已接受(选中分数旁边的复选标记)。