Qt5布局管理(三)——QStackedWidget堆栈窗口类
2016-04-05 23:39
656 查看
堆栈窗口类QStackedWidget
Code@github:https://github.com/LeeHDsniper/LearnQt/tree/master/CH303实例效果
如上图,堆栈窗口左半部分是一个QListWidget对象,右半部分是分别是三个标签。通过点击左边不同的项目,可以使得右边的Lable进行切换。
具体的结构是这样:
首先这个大的窗口是一个QDialog的派生,这个大窗口包含三个子对象:
一个QHBoxLayout布局对象,它将窗口分为左右两部分
一个QListWidget对象,包含三个Item
一个QStackedWidget对象,包含了三个标签对象
代码如下:
stackdlg.h,定义了各个元素
#ifndef STACKDLG_H #define STACKDLG_H #include <QDialog> #include <QListWidget> #include <QStackedWidget> #include <QLabel> class StackDlg : public QDialog { Q_OBJECT public: StackDlg(QWidget *parent = 0); ~StackDlg(); private: QListWidget *list; QStackedWidget *stack; QLabel *lable1; QLabel *lable2; QLabel *lable3; }; #endif // STACKDLG_H
stackdlg.cpp 具体实现
#include "stackdlg.h" #include <QHBoxLayout> StackDlg::StackDlg(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("StackedWidget")); list=new QListWidget(this); //新建一个QListWidget控件对象 list->insertItem(0,tr("Window1"));//在QListWidget中插入三个条目作为选择项 list->insertItem(1,tr("Window2")); list->insertItem(2,tr("Window3")); //创建三个QLable标签控件对象,作为堆栈窗口需要显示的三层窗体 lable1=new QLabel(tr("WindowTest1")); lable2=new QLabel(tr("WindowTest2")); lable3=new QLabel(tr("WindowTest3")); stack=new QStackedWidget(this);//新建一个QStackedWidget堆栈窗体对象 //将三个QLable标签控件依次插入堆栈窗体中 stack->addWidget(lable1); stack->addWidget(lable2); stack->addWidget(lable3); QHBoxLayout *mainlayout=new QHBoxLayout(this); mainlayout->setMargin(5); mainlayout->setSpacing(5); mainlayout->addWidget(list); mainlayout->addWidget(stack,0,Qt::AlignHCenter); mainlayout->setStretchFactor(list,1); mainlayout->setStretchFactor(stack,3); connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))); } StackDlg::~StackDlg() { }
重要代码
这个里面的重要代码有两个:1.
mainlayout->setStretchFactor(list,1);
mainlayout->setStretchFactor(stack,3);
这个我在前面的文章中已经讲过:
/article/10010641.html,这里对list和stack的参数为1和3,区别就在于拉伸时的变化率的大小。
2.
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
这个连接函数将QListWidget的信号currentRowChange(int)和QStackedWidget的槽setCurrentIndex(int)连接在一起,所以才导致了堆栈窗口的切换。
相关文章推荐
- QT 智能提示设置
- qt5使用mysql
- PyQt4开关按钮ToggleButton
- Qt回忆录之配置开发环境
- Qt的信号和槽是如何工作的
- VS集成Qt环境搭建
- Qt Creator管理多个项目
- PyQt4单选框QCheckBox
- tq2440编译ARM版本的Qt4出错问题解决
- 将Qt 动态链接生成的exe及依赖dll打包方法
- QT学习笔记——“const"
- [Qt入门篇]5 Qt的属性系统——声明属性
- sublime text 2 运行pyqt没有显示
- Qt之模式、非模式、半模式对话框
- Qt之模式、非模式、半模式对话框
- [Qt小知识集锦]QT的5个基础知识,你知道几个
- qt的编译
- qt 移植到开发板
- Qt学习笔记0405
- Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet)good