老规矩,给个目标实现以下:
代码展示,
首先创建一个项目,不要界面,选择基类是QDialog这个,后面名字的话随便改改
我的类名是:StackDlg
所以之后,只要在stackdlg.h里面加入两个头文件,等会要用的
#include <QListWidget> #include <QStackedWidget> #include <QLabel> #include <QHBoxLayout>
全部代码
#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 *label1; //文本窗体 QLabel *label2; QLabel *label3; }; #endif // STACKDLG_H
然后在stackdlg.cpp里面是:
#include "stackdlg.h" #include <QListWidget> #include <QStackedWidget> #include <QLabel> #include <QHBoxLayout> StackDlg::StackDlg(QWidget *parent) : QDialog(parent) //继承过来的构造函数 { setWindowTitle(tr("StackedWidget")); //设置窗体的名字 list = new QListWidget(this); //创建一个列表框 //往这个列表框里面添加元素 list->insertItem(0, tr("NO.1")); list->insertItem(1, tr("NO.2")); list->insertItem(2, tr("NO.3")); label1 = new QLabel(tr("测试1")); label2 = new QLabel(tr("测试2")); label3 = new QLabel(tr("测试3")); stack = new QStackedWidget(this); //为这个主窗体创建一个堆栈窗体 stack->addWidget(label1); //添加一个文本进入窗体 stack->addWidget(label2); //添加第二个 stack->addWidget(label3); //添加第三个 QHBoxLayout *mainLayout = new QHBoxLayout(this); //设置一个布局 mainLayout->setMargin(5); //设置这个对话框的边距 mainLayout->setSpacing(5); //设置各个控件之间的边距 mainLayout->addWidget(list); //把list里面的内容加到窗体里面 mainLayout->addWidget(stack, 0, Qt::AlignHCenter); mainLayout->setStretchFactor(list, 3); //设定为可伸缩的控件,第一个参数是用于指定设置的控件,第二个大于0表示这个控件可伸缩 mainLayout->setStretchFactor(stack, 3); connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int))); } StackDlg::~StackDlg() { }
其余没变,怎么感觉很累呢???
然后修改一点点,我们了解一下那个QListWidget到底是个什么情况
#include "stackdlg.h" #include <QListWidget> #include <QStackedWidget> #include <QLabel> #include <QHBoxLayout> StackDlg::StackDlg(QWidget *parent) : QDialog(parent) //继承过来的构造函数 { setWindowTitle(tr("StackedWidget")); //设置窗体的名字 list = new QListWidget(this); //创建一个列表框 //往这个列表框里面添加元素 list->insertItem(0, tr("NO.1")); list->insertItem(1, tr("NO.2")); list->insertItem(2, tr("NO.3")); list->insertItem(2, tr("222")); //后加入的会覆盖前面的,这里和上面不一样,其余一样 label1 = new QLabel(tr("测试1")); label2 = new QLabel(tr("测试2")); label3 = new QLabel(tr("测试3")); stack = new QStackedWidget(this); //为这个主窗体创建一个堆栈窗体 stack->addWidget(label1); //添加一个文本进入窗体 stack->addWidget(label2); //添加第二个 stack->addWidget(label3); //添加第三个 QHBoxLayout *mainLayout = new QHBoxLayout(this); //设置一个布局 mainLayout->setMargin(5); //设置这个对话框的边距 mainLayout->setSpacing(5); //设置各个控件之间的边距 mainLayout->addWidget(list); //把list里面的内容加到窗体里面 mainLayout->addWidget(stack, 0, Qt::AlignHCenter); mainLayout->setStretchFactor(list, 3); //设定为可伸缩的控件,第一个参数是用于指定设置的控件,第二个大于0表示这个控件可伸缩 mainLayout->setStretchFactor(stack, 3); connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int))); } StackDlg::~StackDlg() { }
执行结果: