news 2026/5/30 18:41:31

Qt菜单项切换主界面

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 18:54:20

练题100天——DAY29:岛屿的周长+寻找两个正序数组的中位数

今天的两道题都是有点硬的骨头&#xff0c;勉勉强强能做出来&#xff0c;但是想不到特定的解决方法&#xff0c;算法难度★★★★。深度优先算法和二分查找以为自己会&#xff0c;遇到这两道题算是给了我当头两棒&#xff1a;根本不知道何时用、怎么用深度优先算法&#xff0c;…

作者头像 李华
网站建设 2026/5/28 0:19:02

EtherCAT 转 Modbus RTU 网关:实现倍福 PLC 与宇电 AI-516 温控器协同联动

一、项目背景 某精密机械制造企业的数控加工生产线面临异构设备通信难题&#xff1a;生产线核心控制采用倍福 CX5140 PLC&#xff08;支持 EtherCAT 协议&#xff09;&#xff0c;负责主轴运转、工序联动及整体流程控制&#xff0c;而现场 18 台数控加工机床的温度调控依赖宇电…

作者头像 李华
网站建设 2026/5/21 0:05:54

平台生态:生成式AI的差异化规则与适配策略

主流AI平台的生态特征不同生成式AI平台基于其训练数据、技术架构和商业策略&#xff0c;形成了各具特色的“生态偏好”。理解这些差异是制定有效GEO策略的前提。OpenAI的ChatGPT表现出对权威来源和近期内容的明显偏好。研究显示&#xff0c;ChatGPT在回答事实性问题时&#xff…

作者头像 李华
网站建设 2026/5/29 8:35:02

8.SpringTask

8.1 定时任务定时任务即系统在特定时间执行一段代码&#xff0c;它的场景应用非常广泛&#xff1a;购买游戏的月卡会员后&#xff0c;系统每天给会员发放游戏资源。管理系统定时生成报表。定时清理系统垃圾。定时任务的实现主要有以下几种方式&#xff1a;Java自带的java.util.…

作者头像 李华
网站建设 2026/5/29 8:41:26

BIOS VS UEFI

目录标题一、整体结论先给出&#xff08;给决策用&#xff09;二、启动链路&#xff1a;这是两者本质区别1️⃣ Legacy BIOS 启动链路&#xff08;你现在这台&#xff09;关键工程特征2️⃣ UEFI 启动链路&#xff08;现代标准&#xff09;关键工程特征三、磁盘与分区模型&…

作者头像 李华
网站建设 2026/5/30 5:53:25

Flink源码阅读:状态管理

前面我们介绍了 Flink 状态的分类和应用。今天从源码层面再看一下 Flink 是如何管理状态的。State 概述 关于 State 的详细介绍可以参考 Flink学习笔记&#xff1a;状态类型和应用 和 Flink学习笔记&#xff1a;状态后端这两篇文章&#xff0c;为了方面阅读&#xff0c;这里我…

作者头像 李华