当前位置: 首页 > news >正文

Qt中实现多个QMainWindow同时显示

在Qt中实现多个QMainWindow同时显示,可通过以下方法实现:

一、直接显示多个实例

必须使用new创建堆对象,避免栈对象因作用域结束被销毁‌。

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    
    // 创建两个独立的主窗口
    QMainWindow *w1 = new QMainWindow();
    QMainWindow *w2 = new QMainWindow();
    
    w1->show();  // 显示第一个窗口
    w2->show();  // 显示第二个窗口
    
    return a.exec();  
}

二、模态窗口实现(类似QDialog)

通过QEventLoop事件循环对象‌,启动事件循环,关闭事件循环。

// 继承QMainWindow的子类
class SecondWindow : public QMainWindow {
    Q_OBJECT
public:
    void exec() {
        setWindowModality(Qt::ApplicationModal);
        show();
        m_eventLoop.exec(); 
    }

protected:
    void closeEvent(QCloseEvent *event) override {
        m_eventLoop.exit(); 
        QMainWindow::closeEvent(event);
    }

private:
    QEventLoop m_eventLoop; 
};

三、窗口间交互控制

通过信号槽实现窗口切换。

// 主窗口类中实现跳转逻辑
void MainWindow::on_openButton_clicked() {
    SecondWindow *sw = new SecondWindow(this);  // 指定父对象自动释放内存
    sw->show(); 
}

// 子窗口关闭时触发信号
void SecondWindow::closeEvent(QCloseEvent *event) {
    emit windowClosed();  // 发送关闭信号‌
    QMainWindow::closeEvent(event);
}

相关文章:

  • Spring MVC笔记
  • 记录小白使用 Cursor 开发第一个微信小程序(二):创建项目、编译、预览、发布(250308)
  • 计算机毕业设计SpringBoot+Vue.js餐饮管理系统(源码+文档+PPT+讲解)
  • AutoGen学习笔记系列(八)Advanced - Custom Agents
  • android13打基础: 保存用户免得下次重新登录逻辑
  • 红日靶场(一)——个人笔记
  • C++ MySQL 常用接口(基于 MySQL Connector/C++)
  • red hat系统离线部署Deepseek
  • 文本处理Bert面试内容整理-BERT的应用场景有哪些?
  • SpringBoot集成MQ,四种交换机的实例
  • nginx部署问题
  • 【RocketMQ】二、架构与核心概念
  • Redis- 大key
  • 【深度学习】宠物品种分类Pet Breeds Classifier
  • uniapp+node+mysql接入deepseek实现流式输出
  • mybatis-plus+springboot3项目实现分页
  • 【自学笔记】Numpy基础知识点总览-持续更新
  • linux上安装redis[从0到1]
  • 【AGI】通往AGI的复兴号:模型工具演进与技术路径优化
  • 03特征值分解
  • 沈阳网站建设渠道/抖音引流推广怎么做
  • 网站推广究竟应该怎么做/网站建设对企业品牌价值提升的影响
  • 盐山网站制作/广告联盟app下载赚钱
  • 郑州网站改版公司/郑州seo关键词
  • 青海网站建设价格低/网络推广接单平台
  • 一个网站的建设步骤是/网络营销效果评估