应用场景:
当使用QT开发多个窗口的工具时,有时候需要禁止其他窗口的输入以及响应,确保当前窗口为顶层窗口。
功能实现:
通过设置QtWidget窗口的模态,可以实现限制非当前窗口的输入以及响应。根据创建QtWidget时,是否指定其父类,设定特定模态,实现对其他窗口的输入限制:
-
如果创建窗口时有指定了父窗口(
QtWidgets.QWidget(parent=widget)
),即传入parent参数,可以通过QWidget.setWindowModality(QtCore.Qt.WindowModal)
禁止父窗口及其祖父窗口的操作响应。 -
如果创建窗口时没有有指定了父窗口(
QtWidgets.QWidget()
),即没有传入parent参数,可以通过QWidget.setWindowModality(QtCore.Qt.ApplicationModal)
禁止应用其他界面的操作响应。
附:
QWidget.setWindowModality
常用的几个参数说明:
- QtCore.Qt.NonModal 非模态窗口,值为0,不会阻止其他窗口的响应;
- QtCore.Qt.WindowModal 单层次的模态窗口,值为1, 即单窗口层次结构,会阻止父窗口及父窗口的兄弟窗口、祖父窗口以及祖父窗口的兄弟窗口的响应;
- QtCore.Qt.ApplicationModal 应用的模态窗口,值为2,阻塞整个应用程序的所有窗口。