widget.h
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QStackedWidget> //堆叠窗口
#include <QComboBox> //下拉条
#include <QLabel> //标签
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QStackedWidget *sw; //容器,装标签
QComboBox *cbb; //下拉条
QLabel *lb[2]; //两个标签,装两张图片
};
#endif // WIDGET_H
widget.cpp
cpp
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
setWindowTitle("堆叠窗口");
sw = new QStackedWidget(this); //创建堆叠窗口
sw->setFixedSize(640,480); //设置窗口大小
QStringList picFileList = {":/pictures/1.jpg",":/pictures/2.jpg"}; //保存图片路径信息
for(int i = 0;i < 2;i++)
{
lb[i] = new QLabel(this); //创建标签
lb[i]->setFixedSize(640,480); //设置标签大小
lb[i]->setScaledContents(true); //设置自适应大小
lb[i]->setPixmap((QPixmap(picFileList.at(i)))); //在标签中装入picFileList中索引为i的对应图片
sw->addWidget(lb[i]); //容器中添加2个标签
}
sw->setCurrentIndex(0); //堆叠窗口设置当前索引为0,运行后显示的是第一个标签的图片
cbb = new QComboBox(this); //创建下拉条
for(int i = 0;i < 2;i++)
{
cbb->addItem(QIcon(picFileList[i]),picFileList.at(i)); //添加条目,包括图片图标,图片路径
}
//cbb->addItems(picFileList);
QHBoxLayout *hb = new QHBoxLayout();
hb->addStretch(); //弹簧
hb->addWidget(cbb); //设置在中间位置
hb->addStretch();
QVBoxLayout *vb = new QVBoxLayout();
vb->addWidget(sw);
vb->addLayout(hb);
setLayout(vb);
connect(cbb,QOverload<int>::of(&QComboBox::currentIndexChanged),[=](int index){ //有重载,需要确定使用带哪个参数的函数
sw->setCurrentIndex(index); //下拉条索引改变时触发容器当面页面改变
});
}
Widget::~Widget()
{
}
main.cpp
cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
结果