设置 QMainWindow 窗口为模态

发布时间 2024-01-08 11:29:44作者: Jeffxue

QDialog 因为有 exec() 函数为阻塞式的可以让 QDialog 成为模态的界面,但是 QMainWindow 创建的对象窗口只能使用 show() 来进行显示,无法直接让以 QMainWindow 的对象实现模态的效果。
如果要使 QMainWindow 的实例化对象能够实现模态的效果,必须要满足两个条件:

  1. QMainWindow 的对象必须要有 parent 父对象。
  2. 设置 QMainWindow 对象为模态的类型。

具体如下:

// 1. MyMainWindow 为继承自 QMainWindow 的类,在创建其对象时指定其父对象,否则设置模态将无法生效
MyMainWindow* dlg = new MyMainWindow(this);

// 2. 设置窗口为模态:
dlg->setWindowModality(Qt::WindowModal); // 也可以使用: dlg->setWindowModality(Qt::ApplicationModal); 方式

// 3. 显示该窗口,此时就是模态的效果
dlg->show();