1.QT创建堆叠窗口使用类,但是使用它时主窗口不能是MainWindow,否则会出现布局错误,本例中使用基类为QDialog
QStackedWidget
2.可以配合列表框QListWidget和QComboBox使用
3.先看代码stackwindow.h文件:
#define STACKWINDOW_H
#include <QDialog>
#include <QListWidget>//列表框
#include <QStackedWidget>//堆栈窗体
#include <QLabel>
class StackWindow : public QDialog
{
Q_OBJECT
public:
StackWindow(QWidget *parent = 0);
~StackWindow();
void initWindow();
private:
QListWidget *_lw;
QStackedWidget *_sw;
QLabel *_lb1;
QLabel *_lb2;
QLabel *_lb3;
};
#endif // STACKWINDOW_H
4.看主文件stackwindow.cpp,代码主要封装在initWindow函数中
#include "stackwindow.h"
#include <QVBoxLayout>
StackWindow::StackWindow(QWidget *parent)
: QDialog(parent)
{
initWindow();
}
StackWindow::~StackWindow()
{
}
void StackWindow::initWindow()
{
setWindowTitle("堆栈窗体");
//初始化控件
_lw = new QListWidget(this);
//QListWidget中插入选择项
_lw->insertItem(0,"主页");
_lw->insertItem(1,"娱乐");
_lw->insertItem(2,"八卦");
//初始化标签控件
_lb1 = new QLabel("看新闻",this);
_lb2 = new QLabel("看娱乐",this);
_lb3 = new QLabel("看八卦",this);
//创建堆叠窗体
_sw = new QStackedWidget(this);//父对象为主窗体
//_sw->setStyleSheet("background:red");
//将三个label加入_sw中
_sw->addWidget(_lb1);
_sw->addWidget(_lb2);
_sw->addWidget(_lb3);
//对主窗口布局
QHBoxLayout *hl = new QHBoxLayout();
hl->setMargin(10);//设置边距
hl->setSpacing(10);//设置控件间距
//布局中加入窗体
hl->addWidget(_lw);
hl->addWidget(_sw,0,Qt::AlignHCenter);
hl->setStretchFactor(_lw,1);//设置控件尺寸占比
hl->setStretchFactor(_sw,3);//
setLayout(hl);
connect(_lw,SIGNAL(currentRowChanged(int)),_sw,SLOT(setCurrentIndex(int)));
}
5.main文件比较简单
#include "stackwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StackWindow w;
w.show();
return a.exec();
}
6.看一下运行效果:
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓