Qt5布局管理(三)—QStackedWidget堆栈窗口类|环球即时看


(资料图)

实例效果如下图:

如上图,堆栈窗口左半部分是一个 QListWidget 对象,右半部分是分别是三个标签。通过点击左边不同的项目,可以使得右边的Lable进行切换。 具体的结构是这样: 首先这个大的窗口是一个QDialog的派生,这个大窗口包含三个 子对象

一个QHBoxLayout布局对象,它将窗口分为左右两部分 一个QListWidget对象,包含三个Item 一个QStackedWidget对象,包含了三个标签对象

代码如下: stackdlg.h ,定义了各个元素

1 #ifndef STACKDLG_H 2 #define STACKDLG_H 3  4 #include 5 #include 6 #include 7 #include 8 class StackDlg : public QDialog 9 {10     Q_OBJECT11 12 public:13     StackDlg(QWidget *parent = 0);14     ~StackDlg();15 private:16     QListWidget *list;17     QStackedWidget *stack;18     QLabel *lable1;19     QLabel *lable2;20     QLabel *lable3;21 };22 23 #endif // STACKDLG_H

stackdlg.cpp 具体实现

1 #include "stackdlg.h" 2 #include 3 StackDlg::StackDlg(QWidget *parent) 4     : QDialog(parent) 5 { 6     setWindowTitle(tr("StackedWidget")); 7     list=new QListWidget(this);        //新建一个QListWidget控件对象 8     list->insertItem(0,tr("Window1"));//在QListWidget中插入三个条目作为选择项 9     list->insertItem(1,tr("Window2"));10     list->insertItem(2,tr("Window3"));11     //创建三个QLable标签控件对象,作为堆栈窗口需要显示的三层窗体12     lable1=new QLabel(tr("WindowTest1"));13     lable2=new QLabel(tr("WindowTest2"));14     lable3=new QLabel(tr("WindowTest3"));15     stack=new QStackedWidget(this);//新建一个QStackedWidget堆栈窗体对象16     //将三个QLable标签控件依次插入堆栈窗体中17     stack->addWidget(lable1);18     stack->addWidget(lable2);19     stack->addWidget(lable3);20     QHBoxLayout *mainlayout=new QHBoxLayout(this);21     mainlayout->setMargin(5);22     mainlayout->setSpacing(5);23     mainlayout->addWidget(list);24     mainlayout->addWidget(stack,0,Qt::AlignHCenter);25     mainlayout->setStretchFactor(list,1);26     mainlayout->setStretchFactor(stack,3);27     connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));28 }29 30 StackDlg::~StackDlg()31 {32 33 }

main.cpp如下:

1 #include "stackdlg.h" 2 #include 3  4 int main(int argc, char *argv[]) 5 { 6     QApplication app(argc, argv); 7     Dialog w; 8     w.show(); 9 10     return app.exec();11 }

重要代码

这个里面的重要代码有两个: 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) 连接在一起,所以才导致了堆栈窗口的切换。

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

关键词:

推荐DIY文章
主机存在磨损或划痕风险 PICO4便携包宣布召回
穿越湖海!特斯拉Cybertruck电动皮卡可以当“船”用
vivoXFold+折叠旗舰开售 配备蔡司全焦段旗舰四摄
飞凡R7正式上市 全系标配换电架构
中兴Axon30S开售 拥有黑色蓝色两款配色
荣耀MagicBookV14 2022正式开售 搭载TOF传感器
it