QT中使用QTabWidget实现多对话框的切换

  • 多对话框切换的实现
    • 主界面
    • 子界面
    • 在主对话框的.cpp中引用新建的子对话框的.h头文件
    • 编写通过切换标签页的Tab来实现切换不同的对话框
    • 最终效果

多对话框切换的实现

最近在做嵌入式Linux的QT界面,需要用到标签页实现不同对话框的切换,然后在QT中使用QTabWidget来实现该功能,特此记录下,自己踩过的坑。

主界面

该QT界面的主界面是使用QT的设计师界面创建的,即mainwindow(主界面),然后在mainwindow.ui的设计师界面中插入Tab Widget,插入后的界面如下所示,并将Tab Widget重新命名为Change_Dialog。

子界面

在整个工程中插入子对话框,在工程中使用Add New插入新的对话框,本界面中新的对话框使用的也是设计师界面,新建对话框的过程的界面如下所示,选择的是Dialog without Buttons,然后点下一步,在下一步中输入类名,即可创建出新的子对话框。

在创建好的子对话框中放入一个button,用来测试释放通过标签页来切换对话框是否成功。FileDialog为本博主新建的子对话框

在主对话框的.cpp中引用新建的子对话框的.h头文件

在主对话框的.h中引用新建的子对话框的.h头文件,即可在主对话框中调用子对话框的类文件,在mainwindow.h文件中引入三个界面变量,FileDialog,SetRecordModel和SetData都为新建的子对话框

// An highlighted block
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTableWidget>
#include <QDebug>
#include <QApplication>
#include <QDesktopWidget>
#include "filedialog.h"
#include "setrecordmodel.h"
#include "setdata.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
private slots:void on_Change_Dialog_tabBarClicked(int index);private:Ui::MainWindow *ui;/* 自定义变量 */FileDialog      *m_filedialog;SetRecordModel  *m_setrecordmodel;SetData         *m_setdata;/* 自定义函数 */void Init_MainWindow(void);
};
#endif // MAINWINDOW_H

编写通过切换标签页的Tab来实现切换不同的对话框

在mainwindow.cpp文件中编写切换对话框的代码。
1)首先需要创建对象,然后初始化标签页以及打开客户端首先显示的界面

// An highlighted block//初始化文件管理和设置参数变量MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建对象m_filedialog = new FileDialog();m_setrecordmodel = new SetRecordModel();m_setdata = new SetData();//设置显示第一页//先清除标签页ui->Change_Dialog->clear();//然后添加对话框ui->Change_Dialog->addTab(m_filedialog,"文件管理");ui->Change_Dialog->addTab(m_setrecordmodel,"录音模式设置");ui->Change_Dialog->addTab(m_setdata,"参数设置");//显示文件管理的界面ui->Change_Dialog->setCurrentIndex(0);
}

2)编写切换代码,在mainwindow.ui的设计师界面中,添加点击标签页的槽函数,如下图所示:

然后,到mainwindow.cpp中的void MainWindow::on_Change_Dialog_tabBarClicked(int index)函数进行相应的代码填充

void MainWindow::on_Change_Dialog_tabBarClicked(int index)
{int Current_Index = 0;Current_Index = index;switch (Current_Index) {//0为文件管理界面case 0:ui->Change_Dialog->setCurrentIndex(Current_Index);break;//1为录音模式设置界面case 1:ui->Change_Dialog->setCurrentIndex(Current_Index);break;//参数设置界面case 2:ui->Change_Dialog->setCurrentIndex(Current_Index);break;default:break;}
}

3)为了避免内存泄漏,需要在析构函数中进行释放

MainWindow::~MainWindow()
{delete  ui;delete  m_filedialog;delete  m_setrecordmodel;delete  m_setdata;
}

最终效果

经过测试,能实现博主想要的效果,最终的效果如下所示:

QT中使用QTabWidget实现多对话框的切换相关推荐

  1. qt中设置QTabWidget,QGroupBox,QScrollArea的样式

    引言 本文对标题中所述的三种控件的样式使用样式表来设置其外观.该样式表没有采用样式文件,而是在程序中直接使用函数setStyleSheet()来设置控件的样式. 前期准备 ui文件中各控件的结构如下图 ...

  2. Qt 中关于QTabWidget的理解

    QTabWidget与QTabBar     QTabWidget 并不等于QTabBar,如下图所示,蓝色部分是QTabBar,黄色部分是QTabWidget.     QTabWidget在创建后 ...

  3. ubuntu 中的qt怎么调用graphics.h_Qt 标准对话框之 QFileDialog

    Qt 标准对话框之 QFileDialog <Qt 学习之路>已经写到了第15篇,然而现在再写下去却有点困难,原因是当初并没有想到会连续的写下去,因此并没有很好的计划这些内容究竟该怎样去写 ...

  4. Qt中标准对话框实例,QObject::tr()的作用

    函数 tr()全名是QObject::tr(),被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用. 只要记住,Qt 的最佳实践:如果你想让你的程序国际化的话,那么,所有 ...

  5. QT中的模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  6. Qt中的模态对话框和非模态对话框

    模态对话框及非模态对话框(详情见课本P51). 模态对话框:在没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭. 非模态对话框:当被打开时,用户既可选择和该对话框进行交互, ...

  7. Qt的对话框与窗口--Qt中主要的窗体类及其用途

    Qt中主要的窗体类及其用途     常用的窗体基类是QWidget.QDialog和QMainWindow,在创建GUI应用程序时选择窗体基类就是从这3个类中选择.QWidget直接继承于QObjec ...

  8. 关于Qt中QDialog对话框调用exec()函数界面退出造成僵尸程序问题

    关于Qt中QDialog对话框调用exec函数产生的问题 问题一: 问题描述: 原因分析: 解决方案: 问题二: 问题描述: 求助:关于这个问题,学识尚浅,求大佬分析一波 问题一: QDialog对话 ...

  9. QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面

    QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面 效果截图: 创建上文件夹Designers,使用Designer设计三个UI界面: First.ui Second.ui T ...

最新文章

  1. 海量Web日志分析 用Hadoop提取KPI统计指标
  2. boost::hana::eval_if用法的测试程序
  3. opencv 车辆识别_丽水专业人脸自动识别系统网
  4. http://www.gamesofdesire.com/
  5. JVM-Java内存区域
  6. 『设计模式』一张图告诉你UML图怎么画❀
  7. [react] <div onClick={handlerClick}>单击</div>和<div onClick={handlerClick(1)}>单击</div>有什么区别?
  8. [js] callee和caller的区别和作用是什么?
  9. Java集合框架使用总结
  10. python socket模块 和pyqt5_PyQt5+Socket实现CS架构的建议聊天室
  11. FR常用技巧逐步整理
  12. jsp测试mysql_求一段jsp连接mysql的测试程序
  13. 分布式数据:缓存技术
  14. 计算机无法关闭开机密码,电脑开机密码怎么取消
  15. 13 . 外部中断实验
  16. ie浏览器出现代理服务器没有响应
  17. 区块链与金融基础设施——兼论Facebook Libra
  18. 计算机简单易懂知识,如何选购电脑主板?小白装机简单易懂的电脑主板选购知识指南...
  19. Qt 给QWidget添加工具栏
  20. 我们能做出量子计算机却至今摸不透量子力学,【科技日报】我们能做出量子计算机,却至今摸不透量子力学...

热门文章

  1. Java 8 的四大函数
  2. java:Map接口
  3. c语言怎么把两个数组连接到一起,连接两个数组的方法
  4. 从价值观选择到重构思维模型
  5. NAN值及isnan函数
  6. 【转载与实操】saft-rm
  7. 按关键字搜索淘宝商品 API 返回值说明
  8. 安卓动画爱心雨和大风车动画+擦除动画
  9. CVPR2021 | VQGAN+:Taming Transformers for High-Resolution Image Synthesis
  10. C# SqlSugar框架的学习使用(五)-- 更新和删除数据的详细用法