news 2026/6/10 16:45:48

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/6/9 21:17:42

基于Springboot学生考勤管理系统【附源码+文档】

&#x1f495;&#x1f495;作者&#xff1a; 米罗学长 &#x1f495;&#x1f495;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

作者头像 李华
网站建设 2026/6/9 18:27:10

现实中的网络安全具体是做什么的?常见的网络安全岗位有哪些?

有位朋友私信我说&#xff1a;想学习网络安全&#xff0c;但对现实中的网络安全工作不太清楚&#xff0c;今天小编就对这这位朋友的一些问题展开说说&#xff0c;跟大家分享一下我的思路方向~先回答一下这位朋友的第一个问题&#xff1a;现实中的网络安全工程师大概是做什么的&…

作者头像 李华
网站建设 2026/6/10 15:40:15

收藏!35岁Java程序员被优化后逆袭:AI大模型才是破局关键

“兄弟&#xff0c;35岁的程序员&#xff0c;是不是真就成了职场弃子&#xff1f;” 深夜的电话里&#xff0c;老李的声音像泡透了的茶&#xff0c;沙哑得没一点力气。就在24小时前&#xff0c;他刚从任职五年的大厂外包岗离开——这个手握211学历、写了十二年Java的老程序员&a…

作者头像 李华
网站建设 2026/6/10 11:57:53

Java 的节奏哲学:一门不追求“最快”,却极少“失控”的工程语言

在技术讨论中&#xff0c;“快”常常被当作最高追求&#xff1a; 启动要快、响应要快、开发要快、迭代要快。 但在真实工程世界里&#xff0c;很多系统并不是因为“慢”而失败&#xff0c;而是因为节奏失控。节奏失控意味着&#xff1a;负载变化无法预期性能波动难以解释系统状…

作者头像 李华
网站建设 2026/6/9 17:26:31

收藏!大模型项目别瞎做,这样做才拿得到Offer

在CSDN的大模型交流区和我的学习社群里&#xff0c;每天都能刷到类似的困惑&#xff1a;有人晒出自己搭建的第8个RAG系统Demo&#xff0c;简历里却写得像“流水账”&#xff1b;有人把LoRA微调、模型量化玩得炉火纯青&#xff0c;面试时被问“这个技术能帮公司省多少钱”却哑口…

作者头像 李华
网站建设 2026/6/10 15:42:11

Go语言中的切片

Go 语言中的切片&#xff08;Slice&#xff09;是一个非常核心的数据结构&#xff0c;它是对数组的抽象和封装&#xff0c;提供了更灵活、强大的序列处理能力。一. 切片的基本概念切片是一个动态数组&#xff0c;它由三个部分组成&#xff1a;指针&#xff1a;指向底层数组的起…

作者头像 李华