第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下新安装的mysql修改root password问题
常用步骤: 1. 在my.ini中的mysqld下添加一行 skip-grant-tables 2.重启mysql后直接进入后,用SQL直接修改password列: C:\> net stop ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】四.开发设备驱动
SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 开发准备 把“开发包”内的所有文件复制到项目的“bin”目录下,或项目下的专用生成目录.开发包 ...
- getElementById() getElementsByTagName() getElementsByClassName() querySlector() querySlectorAll()区别
1. getElementById() getElementsByTagName() javascript原生的方法,这两个不会有兼容性问题. 2. getElementsByClassName() ...
- 征友记之---前端开发Partner
简单自述下: 本人前端开发者,深圳一公司在职员工,非出自前端科班,乃自学前端已近两年之久. 受前端 ...
- Golang(笔记) 面向对象
package main import ( "fmt" ) //对象定义 type Rect struct{ x,y float64 width ,height float64 } ...
- Git 常见的命令操作
克隆 git clone git地址 查看分支 git branch 查看git库状态 git status 切换分支 git che ...
- 为项目配置logback日志
为了保证系统在上线后亦能查看运行的日志,故为系统加入日志. 1:系统引入jar包 slf4j-api.jar logback-classic.jar logback-core.jar logback- ...
- CLR简介(一)
什么是通用语言运行时(CLR),简单来讲: CLR是一个支持多种编程语言及多语言互操作,完整的高级虚拟机. 有点拗口,而且不是很有启发性,但上面的文字是将又大又复杂的CLR的功能归类以便容易理解的第一 ...
- Scrum vs. PMP vs. PRINCE2的发展趋势图
这时2013年来自Google Trends的两幅图,数据来自对“Jobs and Education”的统计,体现了这三种认证,或者视为三种项目实施方式的趋势. 下图是全球的趋势: 下图是美国的趋势 ...
- 欢迎进入MyKTV点歌系统展示
一个项目,一分收获:一个项目,一些资源.Ktv项目也是一样的,所以我想分享我的收获,让你们获得你需要的资源. 一. 那MyKTV点歌系统具体的功能有哪些呢?我们就来看看吧! 1.MyKTV前台功能: ...