Qt5布局管理(三)——QStackedWidget堆棧窗口類


轉載:LeeHDsniper

實例效果如下圖:

 

如上圖,堆棧窗口左半部分是一個QListWidget對象,右半部分是分別是三個標簽。通過點擊左邊不同的項目,可以使得右邊的Lable進行切換。
具體的結構是這樣:
首先這個大的窗口是一個QDialog的派生,這個大窗口包含三個子對象

  • 一個QHBoxLayout布局對象,它將窗口分為左右兩部分
  • 一個QListWidget對象,包含三個Item
  • 一個QStackedWidget對象,包含了三個標簽對象

代碼如下:
stackdlg.h,定義了各個元素

 1 #ifndef STACKDLG_H
 2 #define STACKDLG_H
 3 
 4 #include <QDialog>
 5 #include <QListWidget>
 6 #include <QStackedWidget>
 7 #include <QLabel>
 8 class StackDlg : public QDialog
 9 {
10     Q_OBJECT
11 
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 <QHBoxLayout>
 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 <QApplication>
 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)連接在一起,所以才導致了堆棧窗口的切換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM