第54课 Qt 中的多页面切换组件
1. 多页面切换组件(QTabWidget)
(1)能够在同一个窗口中自由切换不同页面的内容
(2)是一个容器类型的组件,同时提供友好的页面切换方式
2. QTabWidget的使用方式
(1)在应用程序中创建QTabWidget的对象
(2)将其他QWidget对象加入该对象中。但QTabWidget对象每次只能加入一个QWidget对象,同时将成生成一个新的页面。
(3)将多个组件加入到同一个QTabWidget页面的解决方案
①创建容器类型的组件对象
②将多个子组件在容器对象中布局
③将容器对象加入QTabWidget中生成新的页面
(4)QTabWidget组件的基本用法
//设置QTabWidget对象在父组件中的位置和大小 m_tabWidget.setParent(this); m_tabWidget.move(, ); m_tabWidget.resize(, ); //创建子组件 QPushButton* btn = new QPushButton(&m_tabWidget); btn->setText("You're welcome!"); //加入QTabWidget对象生成新页面 m_tabWidget.addTab(btn, "lst");
3. QTabWidget组件的高级用法
(1)常用的高级用法
①设置Tab标签的位置(North、South、 West、 East)
②设置Tab的外观(Rounded、 Triangular)
③设置Tab的可关闭模式
(2)QTabWidget组件中预定义的信号
①void currentChange(int index):当前显示的页面发生变化,index为新页面下标。
②void tabCloseRequest(int index):位置为index页面的关闭按钮被点击发出关闭请求。
【思考】如何让文本编辑器项目支持多文档操作(利用QTabWidget组件来实现)
【编程实验】QTabWidget组件的初探及高级用法
//main.cpp
#include "Widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
//Widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTabWidget> class Widget : public QWidget { Q_OBJECT QTabWidget m_tabWidget; protected slots: void onTabCurrentChanged(int index); void onTabCloseRequested(int index); public: Widget(QWidget *parent = ); ~Widget(); }; #endif // WIDGET_H
//Widget.cpp
#include "Widget.h" #include <QPlainTextEdit> #include <QLabel> #include <QPushButton> #include <QVBoxLayout> #include <QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) { m_tabWidget.setParent(this); m_tabWidget.move(, ); m_tabWidget.resize(, ); m_tabWidget.setTabPosition(QTabWidget::South); //标签的位置 m_tabWidget.setTabShape(QTabWidget::Triangular); //标签的外观 m_tabWidget.setTabsClosable(true); //可关闭标签 QPlainTextEdit* edit = new QPlainTextEdit(&m_tabWidget); edit->insertPlainText("lst Tab Page"); m_tabWidget.addTab(edit, "1st"); QWidget* widget = new QWidget(&m_tabWidget); QVBoxLayout* layout = new QVBoxLayout(); QLabel* lbl = new QLabel(widget); QPushButton* btn = new QPushButton(widget); lbl->setText("2nd Tab Page"); lbl->setAlignment(Qt::AlignCenter); btn->setText("2nd Tab Page"); layout->addWidget(lbl); layout->addWidget(btn); widget->setLayout(layout); m_tabWidget.addTab(widget, "2nd"); m_tabWidget.setCurrentIndex(); //设置第2个标签页为当前页面 connect(&m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabCurrentChanged(int))); connect(&m_tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequested(int))); } void Widget::onTabCurrentChanged(int index) { qDebug() << "Page change to: " << index; } void Widget::onTabCloseRequested(int index) { m_tabWidget.removeTab(index); } Widget::~Widget() { }
4. 小结
(1)Qt平台中提供了功能强大的多页面组件
(2)QTabWidget组件每次只能加入一个组件
(3)加入多个组件时通过容器组件和布局管理器完成
(4)QTabWidget能够定制页面标签的外观和位置
(5)QTabWidget的预定义信号能够实现程序中的高级功能
第54课 Qt 中的多页面切换组件的更多相关文章
- 第30课 Qt中的文本编辑组件
1. 3种常用的文本编辑组件的比较 单行文本支持 多行文本支持 自定义格式支持 富文本支持 QLineEdit (单行文本编辑组件) Yes No No No QPlainTextEdit (多行普通 ...
- 第47课 Qt中的调色板
1. QPalette类 (1)QPalette类提供了绘制QWidget组件的不同状态所使用的颜色. (2)QPalette对象包含了3个状态的颜色描述 ①激活颜色组(Active):组件获得焦点使 ...
- 第39课 Qt中的事件处理(下)
1. 事件的传递过程 (1)操作系统检测到用户动作时,会产生一条系统消息,该消息被发送到Qt应用程序 (2)Qt应用程序收到系统消息后,将其转化为一个对应的QEvent事件对象,并调用QObject: ...
- 第38课 Qt中的事件处理(上)
1. GUI程序原理回顾 (1)图形界面应用程序的消息处理模型 (2)思考:操作系统发送的消息如何转变为Qt信号 2. Qt中的事件处理 (1)Qt平台将系统产生的消息转换为Qt事件 ①Qt事件是一个 ...
- 第32课 Qt中的文件操作
1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...
- 第11课 Qt中的字符串类
1. 历史遗留问题和解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C ...
- 第7课 Qt中的坐标系统
1. 坐标系统 (1)GUI操作系统都有特定的坐标系统 (2)图形界面程序在坐标系统中进行窗口和部件的定位 (3)定位类型 ①顶级窗口部件的定位 ②窗口内部件的定位 ③窗口部件的大小设置 (4)QWi ...
- Android中的Fragment页面切换和selector选择器
效果如图: 提示:下面是用的整个的图片 下面看代码: //--------------------这是主页面布局文件----------------------- <?xml version=& ...
- WPF中窗体在同一个位置实现不同页面切换
要想在WPF窗体中实现不同页面切换,我们就需要用到ContentControl这个控件,这个控件的位置和大小就是你要显示页面的位置和大小. 下面举例说明: Xaml: <Grid> < ...
随机推荐
- Windows Server 2008设置远程桌面连接的最大数量
远程桌面连接的默认数量是2,当有多个用户需要同时远程桌面连接时很不方便,可以设置远程桌面连接的最大数量. 1. 运行gpedit.msc: 2. 选择计算机配置-->管理模板-->Wind ...
- java for循环冒泡排序
int[]a =new int[]{7,19,66,21,88,40}; for(int i=1;i<=a.length-1;i++){ //比总长度减1趟就排好序了.因为每一趟出一个值. fo ...
- mybatis 中的where标签
mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的: <select id="countNotesByParam" parame ...
- python基础之面向对象高级编程
面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...
- MongoDB常用操作--集合3
1.更新集合中的文档,语法如下: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:用于设置查询条件的对象 objNe ...
- Https网站搭建——通过https://localhost:8443访问tomcat首页
图片大致介绍了Https浏览器与服务器握手的过程,涉及到的名词:证书.Hash算法.随机数密码.公钥加密.私钥解密.握手消息.hash验证.摘要 tomcat服务器配置可以实现https双向认证,简单 ...
- 使用C#类向数据库添加数据的例子源码
在上一篇中,增加了sql server数据库操作类SqlOperator,用于操作sql server数据库.还有一个SqlStringHelper类,用于处理sql语句的单引号.那么这两个类怎么使用 ...
- Vue.js 递归组件实现树形菜单
最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = tr ...
- C语言基于GTK+Libvlc实现的简易视频播放器(二)
简易视频播放器-全屏播放 一.课程说明 上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显 示视频播放进度,但即使作为一个视频播放器,只有这 ...
- [C#6] 4-string 插值
0. 目录 C#6 新增特性目录 1. 老版本的代码 internal class Person { public string Name { get; set; } public int Age { ...