Qt 进阶 07|多窗口管理:父子窗口、窗口传参、关闭事件全处理
2026/6/9 1:33:34 网站建设 项目流程

一、父子窗口区别

  1. 父子窗口
    • 创建时传入this作为父对象;
    • 父窗口移动,子窗口跟随移动;父窗口关闭,子窗口自动销毁;
    • 不会在任务栏单独显示图标。
  2. 独立窗口
    • 父指针为nullptr,完全独立,互不影响。

cpp

运行

// 父子窗口 SubWindow *subWin = new SubWindow(this); subWin->show(); // 独立窗口 SubWindow *subWin2 = new SubWindow(nullptr); subWin2->show();

二、窗口之间传参三种常用方式

1. 构造函数传参(简单参数)

子窗口构造函数增加参数:

cpp

运行

SubWindow::SubWindow(QString text, QWidget *parent) : QWidget(parent) { // 使用传入参数 } // 调用 SubWindow *win = new SubWindow("主窗口传来的数据", this);
2. 成员函数 / Set 方法传参

cpp

运行

// 子窗口提供接口 void SubWindow::setData(QString data) { m_data = data; } // 主窗口调用 win->setData("外部数据");
3. 信号槽传参(解耦推荐,双向通信)

主窗口发信号,子窗口绑定槽函数接收数据。

三、关闭事件 closeEvent 拦截与处理

重写closeEvent,实现关闭确认、数据保存、阻止关闭

cpp

运行

// .h protected: void closeEvent(QCloseEvent *event) override; // .cpp void MainWindow::closeEvent(QCloseEvent *event) { int ret = QMessageBox::question(this,"提示","确定要关闭窗口吗?"); if(ret == QMessageBox::Yes) { event->accept(); // 允许关闭 } else { event->ignore(); // 忽略关闭,窗口保持打开 } }

四、子窗口内存管理

非模态窗口建议添加属性,关闭自动释放:

cpp

运行

subWin->setAttribute(Qt::WA_DeleteOnClose);

小结

简单参数用构造函数 / Set 方法,双向通信优先信号槽closeEvent是拦截窗口关闭的唯一入口。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询