您的位置:首页 > 编程语言 > Qt开发

Qt学习4之QStackedWidget

2017-01-08 11:10 483 查看
学习了一遍QDockWidget类的使用,堆栈窗口,选择基类为“QDialog”

在工程名的h文件中

#ifndef QTSTACKEDWIDGET_H
#define QTSTACKEDWIDGET_H

#include <QtWidgets/QDialog>
#include "ui_qtstackedwidget.h"
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>

class QtStackedWidget : public QDialog
{
Q_OBJECT

public:
QtStackedWidget(QWidget *parent = 0);
~QtStackedWidget();

private:
Ui::QtStackedWidgetClass ui;
private:
QListWidget *list;
QStackedWidget *stack;
QLabel *label1;
QLabel *label2;
QLabel *label3;
};
在工程名的cpp文件中
#include "qtstackedwidget.h"

QtStackedWidget::QtStackedWidget(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
setWindowTitle(tr("StackedWidget"));

list = new QListWidget(this);
//新建一个QListWidget的对象
list->insertItem(0, tr("Window1"));
list->insertItem(1, tr("Window2"));
list->insertItem(2, tr("Window3"));
//插入三个条目作为选择项
label1 = new QLabel(tr("WindowTest1"));
label2 = new QLabel(tr("WindowTest2"));
label3 = new QLabel(tr("WindowTest3"));
//创建三个标签

stack = new QStackedWidget(this);
//新建一个QStackedWidget的对象
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
//将QLabel加入stack

QHBoxLayout *mainLayout = new QHBoxLayout(this);
//对整个对话框进行布局
mainLayout->setMargin(5);
//设定对话框(或窗体)的边距为5.
mainLayout->setSpacing(5);
//设定各个控件之间的间距为5.
mainLayout->addWidget(list);
//将QListWidget加入mainLayout
mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
//将QStackedWidget加入mainLayout,stretch factor = 0,保持默认大小, AlignHCenter为水平方向居中。
mainLayout->setStretchFactor(list, 1);
mainLayout->setStretchFactor(stack, 3);
//不仅使list和stack变为可伸缩型,而且还使stack的显示大小为list的3倍
connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
//此处的堆栈窗体index按插入顺序从0起依次排序,与QListWidget的条目顺序一致。
}
效果如图:



对于这个堆栈窗口界面的产生,我得出了一些总结:

1、stretch factor表示的是伸缩因子。

值为0,则该窗口一直保持默认大小。

值为1,则该窗口随着主窗口进行放大缩小。

值为3,则该窗口随着主窗口进行放大缩小,且其大小一直是值为1的窗口的3倍。

当然,这个3倍只是尽可能的达到3倍,受到了其他限制,如插入窗口的控件的最小尺寸。

2、connect(list, SIGNAL(currentRowChanged(int)), stack,
SLOT(setCurrentIndex(int)));

这个信号与槽相当于传递了一个int型变量,通过得到当前list改变后的row值,然后用来设置当前stack的索引值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  visual studio qt qt5 ui