一、父子窗口区别父子窗口创建时传入this作为父对象父窗口移动子窗口跟随移动父窗口关闭子窗口自动销毁不会在任务栏单独显示图标。独立窗口父指针为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是拦截窗口关闭的唯一入口。
Qt 进阶 07|多窗口管理:父子窗口、窗口传参、关闭事件全处理
发布时间:2026/6/9 1:33:43
一、父子窗口区别父子窗口创建时传入this作为父对象父窗口移动子窗口跟随移动父窗口关闭子窗口自动销毁不会在任务栏单独显示图标。独立窗口父指针为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是拦截窗口关闭的唯一入口。