QT中使用QTabWidget实现多对话框的切换
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实现多对话框的切换相关推荐
- qt中设置QTabWidget,QGroupBox,QScrollArea的样式
引言 本文对标题中所述的三种控件的样式使用样式表来设置其外观.该样式表没有采用样式文件,而是在程序中直接使用函数setStyleSheet()来设置控件的样式. 前期准备 ui文件中各控件的结构如下图 ...
- Qt 中关于QTabWidget的理解
QTabWidget与QTabBar QTabWidget 并不等于QTabBar,如下图所示,蓝色部分是QTabBar,黄色部分是QTabWidget. QTabWidget在创建后 ...
- ubuntu 中的qt怎么调用graphics.h_Qt 标准对话框之 QFileDialog
Qt 标准对话框之 QFileDialog <Qt 学习之路>已经写到了第15篇,然而现在再写下去却有点困难,原因是当初并没有想到会连续的写下去,因此并没有很好的计划这些内容究竟该怎样去写 ...
- Qt中标准对话框实例,QObject::tr()的作用
函数 tr()全名是QObject::tr(),被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用. 只要记住,Qt 的最佳实践:如果你想让你的程序国际化的话,那么,所有 ...
- QT中的模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
- Qt中的模态对话框和非模态对话框
模态对话框及非模态对话框(详情见课本P51). 模态对话框:在没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭. 非模态对话框:当被打开时,用户既可选择和该对话框进行交互, ...
- Qt的对话框与窗口--Qt中主要的窗体类及其用途
Qt中主要的窗体类及其用途 常用的窗体基类是QWidget.QDialog和QMainWindow,在创建GUI应用程序时选择窗体基类就是从这3个类中选择.QWidget直接继承于QObjec ...
- 关于Qt中QDialog对话框调用exec()函数界面退出造成僵尸程序问题
关于Qt中QDialog对话框调用exec函数产生的问题 问题一: 问题描述: 原因分析: 解决方案: 问题二: 问题描述: 求助:关于这个问题,学识尚浅,求大佬分析一波 问题一: QDialog对话 ...
- QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面
QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面 效果截图: 创建上文件夹Designers,使用Designer设计三个UI界面: First.ui Second.ui T ...
最新文章
- 海量Web日志分析 用Hadoop提取KPI统计指标
- boost::hana::eval_if用法的测试程序
- opencv 车辆识别_丽水专业人脸自动识别系统网
- http://www.gamesofdesire.com/
- JVM-Java内存区域
- 『设计模式』一张图告诉你UML图怎么画❀
- [react] <div onClick={handlerClick}>单击</div>和<div onClick={handlerClick(1)}>单击</div>有什么区别?
- [js] callee和caller的区别和作用是什么?
- Java集合框架使用总结
- python socket模块 和pyqt5_PyQt5+Socket实现CS架构的建议聊天室
- FR常用技巧逐步整理
- jsp测试mysql_求一段jsp连接mysql的测试程序
- 分布式数据:缓存技术
- 计算机无法关闭开机密码,电脑开机密码怎么取消
- 13 . 外部中断实验
- ie浏览器出现代理服务器没有响应
- 区块链与金融基础设施——兼论Facebook Libra
- 计算机简单易懂知识,如何选购电脑主板?小白装机简单易懂的电脑主板选购知识指南...
- Qt 给QWidget添加工具栏
- 我们能做出量子计算机却至今摸不透量子力学,【科技日报】我们能做出量子计算机,却至今摸不透量子力学...