Qt5布局管理(三)——QStackedWidget堆栈窗口类
转载:LeeHDsniper
实例效果如下图:

如上图,堆栈窗口左半部分是一个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 = );
~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(,tr("Window1"));//在QListWidget中插入三个条目作为选择项
list->insertItem(,tr("Window2"));
list->insertItem(,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();
mainlayout->setSpacing();
mainlayout->addWidget(list);
mainlayout->addWidget(stack,,Qt::AlignHCenter);
mainlayout->setStretchFactor(list,);
mainlayout->setStretchFactor(stack,);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
} StackDlg::~StackDlg()
{ }
main.cpp如下:
#include "stackdlg.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Dialog w;
w.show(); return app.exec();
}
重要代码
这个里面的重要代码有两个:
1. mainlayout->setStretchFactor(list,1);
mainlayout->setStretchFactor(stack,3);
这个我在前面的文章中已经讲过:
http://blog.csdn.net/leehdsniper/article/details/51005149,这里对list和stack的参数为1和3,区别就在于拉伸时的变化率的大小。
2. connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
这个连接函数将QListWidget的信号currentRowChange(int)和QStackedWidget的槽setCurrentIndex(int)连接在一起,所以才导致了堆栈窗口的切换。
Qt5布局管理(三)——QStackedWidget堆栈窗口类的更多相关文章
- Qt5布局管理(一)——QSplitter分割窗口类
转载:LeeHDsniper 概述 本文首先通过三个实例分别介绍Qt5的分割窗口QSplitter类.停靠窗口QDockWidget类.堆栈窗体QStackedWidget类,然后介绍布局管理器的使用 ...
- Qt5布局管理(二)——QDockWidget停靠窗口类
转载:LeeHDsniper 停靠窗口类QDockWidget 实例效果 如右图所示,左半部分MainWindow是该窗口的中心窗口,右边的最下面两个停靠窗口可以跳出该窗口: 但是第一个停靠窗口只能停 ...
- qt布局管理-缩放、多窗口切换
关于缩放的布局 所有控件要求与主窗口同时缩放,那么在所有控件设置好布局后,最后点击最外侧的主控件,选择水平布局或者垂直布局即可. 另外每个空间的属性可更改,如SizePolicy用于设置空间是否可缩放 ...
- Chapter3:Qt5布局管理
3.1分割窗口QSplitter类 QSplitter *splitterMain = new QSplitter(Qt::Horizontal,0); QTextEdit *textLeft = n ...
- Qt 布局管理器
在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是 ...
- [Qt Creator 快速入门] 第4章 布局管理
第3章讲述了一些窗口部件,当时往界面上拖放部件时都是随意放置的,这对于学习部件的使用没有太大的影响,但是,对于一个完善的软件,布局管理却是必不可少的. 无论是想要界面中部件有一个很整齐的排列,还是想要 ...
- PyQt5(2)——调整布局(布局管理器)第一个程序
我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...
- Window 窗口类
窗口类 WNDCLASS 总结 总结为下面的几个问题: . 什么是窗口类 . 窗口类的三种类型 . 窗口类各字段含义 . 窗口类的注册和注销 . 如何使用窗口类,子类化.超类化是什么 下面分别描述: ...
- Qt 学习之路 2(11):布局管理器
Home / Qt 学习之路 2 / Qt 学习之路 2(11):布局管理器 Qt 学习之路 2(11):布局管理器 豆子 2012年9月4日 Qt 学习之路 2 70条评论 所谓 GUI 界 ...
随机推荐
- 太过亲密往往不好——用non-member,non-friend替换member函数
在前一篇文章,我们提到,使用private来代替public以提高class的封装性.这一篇文章,我们将对接口发起攻势.首先来个简单的例子. class WebBrowser { public: vo ...
- weblogic控制台定制不同权限的用户
安装weblogic并创建域(domain)的时候,会默认创建一个用户,此用户为管理员,也就是权限最大的.只有这样一个用户,用起来很不安全,因为一个测试环境,好多人在用,经常会有人修改上面的数据源等关 ...
- 对多维向量vector<vector<int> > vec进行操作
直接写作vector<vector<int> > vec在VC++6.0下编译不过改做: typedef std::vector<int> ROW; s ...
- Java不同场景oom错误探究及解决办法
1.OOM for Heap=>java.lang.OutOfMemoryError: Java heap space 分 析 此OOM是由于JVM中heap的最大值不满足需要,将设置heap ...
- vue-compile概述
来源 刘涛 Vue的核心可以分为三个大块:数据处理和双向绑定.模板编译.虚拟dom. 前面我们对第一部分的主要内容双向绑定做了一个分析讲解,接下来我们说一说模板编译. 这一部分的内容比较多,也比较复杂 ...
- 配置thunderbirdmail
添加帐号 打开Edit→Account Settings ,选择左下放的 "Account actions"→"Add Mail Account". 在弹出框中 ...
- SVN使用出现的问题及解决方案
SVN使用出现的问题及解决方案 一.问题描述: 使用TortoiseSVN-1.9.5进行CheckOut时,出现报错信息如下: Unable to connect to a repository ...
- Android Mokoid Open Source Project hacking
/***************************************************************************** * Android Mokoid Open ...
- 2018-2019-2 网络对抗技术 20165212 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165212 Exp4 恶意代码分析 原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或E ...
- Dataframe 中的 and vs &
refer to: http://dougaoyang.github.io/2017/09/22/pandas-bool-compare.html df[(df['pop']>3) and (d ...