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

Qt菜单项切换主界面


下面是代码截图

mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class file1; class file2; class edit01; class edit02; class gjxm; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_pushButton_clicked(); void on_actionshouye_triggered(); //菜单项file1 void on_actionsecond_triggered(); //菜单项file2 void on_actionedit01_triggered(); //编辑项edit01 void on_actionedit02_triggered(); //编辑项edit02 void on_actionGjXm_triggered(); //构建-构建项目 private: Ui::MainWindow *ui; file1* file1Widget; file2* file2Widget; edit01* edit1Widget; edit02* edit2Widget; gjxm* gjXmWidget; QWidget* currentWidget; void exchangedWidget(QWidget* pWidget); }; #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h" #include "ui_mainwindow.h" #include "qdebug.h" #include "file1.h" #include "file2.h" #include "edit01.h" #include "edit02.h" #include "gjxm.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) ,file1Widget(NULL) ,file2Widget(NULL) ,edit1Widget(NULL) ,edit2Widget(NULL) ,gjXmWidget(NULL) ,currentWidget(NULL) { ui->setupUi(this); } //切换功能列表界面 void MainWindow::exchangedWidget(QWidget* pWidget) { if (!pWidget || !ui->horizontalLayout) { qWarning("切换失败:新画面为空或布局无效!"); return; } // 1. 移除并释放上一个画面 if (currentWidget) { // 关键:用 removeWidget 直接解除布局与控件的关联(比 removeItem 安全) ui->horizontalLayout->removeWidget(currentWidget); currentWidget->hide(); // 先隐藏,避免视觉闪烁 } // 2. 添加新画面并显示 currentWidget = pWidget; ui->horizontalLayout->addWidget(currentWidget); // 布局自动管理控件大小 currentWidget->show(); // addWidget 可能默认隐藏,显式调用更稳妥 } void MainWindow::on_actionshouye_triggered(){ //菜单项file1 if (file1Widget == NULL) { file1Widget = new file1(this); } exchangedWidget(file1Widget); } void MainWindow::on_actionsecond_triggered() { //菜单项file2 if (file2Widget == NULL) { file2Widget = new file2(this); } exchangedWidget(file2Widget); } void MainWindow::on_actionedit01_triggered() { //编辑项edit01 if (edit1Widget == NULL) { edit1Widget = new edit01(this); } exchangedWidget(edit1Widget); } void MainWindow::on_actionedit02_triggered() { //编辑项edit02 if (edit2Widget == NULL) { edit2Widget = new edit02(this); } exchangedWidget(edit2Widget); } void MainWindow::on_actionGjXm_triggered(){ if(gjXmWidget!=NULL){ delete gjXmWidget; gjXmWidget=NULL; } gjXmWidget=new gjxm(); QObject::connect(gjXmWidget, &gjxm::widgetCloseClicked, [=](){ delete gjXmWidget; gjXmWidget=NULL; }); gjXmWidget->show(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { }


gjxm为点击某菜单弹框,需要重写关闭事件,对外发信号

gjxm.h
#ifndef GJXM_H #define GJXM_H #include <QWidget> namespace Ui { class gjxm; } class gjxm : public QWidget { Q_OBJECT public: explicit gjxm(QWidget *parent = nullptr); ~gjxm(); private: Ui::gjxm *ui; signals: void widgetCloseClicked(); //无参信号 protected: void closeEvent(QCloseEvent *event) override; // 重写关闭事件 }; #endif // GJXM_H

gjxm.cpp

#include "gjxm.h" #include "ui_gjxm.h" #include "QtDebug" gjxm::gjxm(QWidget *parent) : QWidget(parent), ui(new Ui::gjxm) { ui->setupUi(this); qDebug()<<"gjxm + + +"; } void gjxm::closeEvent(QCloseEvent *event) { emit widgetCloseClicked(); } gjxm::~gjxm() { qDebug()<<"gjxm ~ ~ ~"; delete ui; }
http://www.cnnetsun.cn/news/116167.html

相关文章:

  • 大模型Memory模块深度解析:从基础实现到高级应用!
  • 53.自定义工作队列传参
  • 安全VR:靠谱的VR安全体验馆厂商品牌榜,技术实力与落地案例
  • 灵遁者:我对于探索的热爱,从来没有减少过
  • 右值引用和移动语义
  • 基于PLC的智能路灯控制系统的设计
  • N-乙酰神经氨酸——连接生命与健康的“智慧糖链”核心组分 CAS:131-48-6
  • ZooKeeper:enableACL和requireClientSASLAuth
  • 为什么K8s 1.24 的容器时间调整会影响宿主机的时间啊?
  • AI时代核心竞争力:手写多智能体系统,不依赖LangChain/LlamaIndex
  • WebSocket 对比 MQTT通信优势
  • 基于springboot面料花型试衣系统
  • 域名被污染是什么意思?还能不能继续使用?
  • Python大数据基于深度学习的音乐推荐系统-250326--论文
  • Python大数据影评情感分析可视化及推荐系统的设计与实现_u5ck1y17_论文
  • AI Agent设计模式大揭秘:9种架构让你从编程小白变身架构师!
  • Python大数据基于Spark的南昌房价数据分析系统的设计与实现_45i0b357_论文
  • 9 个降AI率工具,自考人必备的降重神器!
  • 9 个降AI率工具,自考人必备!
  • 旅行记录应用新建旅行 - Cordova OpenHarmony 混合开发实战
  • 9 个降AI率工具推荐,继续教育学生必备
  • Java八股文(Java基础面试题)
  • 邦芒忠告:职场中没有好人缘的10种人
  • 基于Spring Boot人才招聘管理系统
  • 拒绝“魔法值”注入:手把手教你实现 Spring Boot 高性能枚举校验注解 @InEnum
  • 国内容易上手的claudecode一键配置指南
  • 复原IP地址
  • Redis 发布订阅
  • JQuery支持WebUploader完成百万文件断点续传的原理?
  • Vue3如何结合组件实现大文件分片的并行上传优化?