Qt學習 堆疊窗體QStackedWidget類

2021-05-26 23:51:26 字數 3040 閱讀 7845

這些窗體都比較類似,相對簡單,就沒什麼可以深入研究的了。

下面用**實現上面視窗的設計:

1.建立專案時基類選擇qdialog,取消gernerate form核取方塊的選中狀態。

2.在標頭檔案dialog.h中編寫如下**:

#include #include #include #include class dialog : public qdialog

;

3.在原始檔dialog.cpp中編寫如下**:

#include "dialog.h"

#include dialog::dialog(qwidget *parent)

: qdialog(parent)

解析:

1.這裡的程式是,選中左邊列表框內的內容,顯示相應的窗體。

2.所以,第一步是初始化列表框qlistwidget。

3.第二步新建堆疊窗體:

stack

=new

qstackedwidget

(this

);

然後將三個相應的label放入其中:

stack

->addwidget(

label1

);

stack

->addwidget(

label2

);

stack

->addwidget(

label3

);

4.設定主窗體布局時,用到了布局管理器。這裡用到的是水平排列窗體qhboxlayout:

qhboxlayout

*mainlayout

=new

qhboxlayout

(this

);

這個布局管理器用法為:

×對話方塊邊距設為5

mainlayout

->setmargin(

5);

×內部控制項間距為5

mainlayout

->setspacing(

5);

×對於setstetchfactor函式,借用別的文章說明(

這裡講得是qsplitter的setstetchfactor函式:

程式為對於b 和 a 來說, 他們的本身的大小相對於整個視窗來說, 都是很小的. 這樣就存在著一些多餘的空間, 這些空間可以給b, 也可以給a, 或者兩個平分. 對於b 和 a 各自空間大小的控制, 是通過 qsplitter 的 setstretchfactor 方法, 該方法的宣告:

void setstretchfactor(int index, int stretch);

第乙個引數index 是子微件的索引值, 從0 開始. 這裡的話, b 是0, a 是1; 第二個引數 stretch 是拉伸係數, int 型別, 下面主要對stretch 的數值進行說明.

1.  mainsplitter->setstretchfactor(0, -2);

效果如下,

b佔據了所有多餘的空間, 看來 stretch 的值如果為負整數, 那這個微件將佔據最大的空間.

2.     mainsplitter->setstretchfactor(0, -2);

mainsplitter->setstretchfactor(1, -4);

效果如下:

b 和 a 平分了空間, 看來stretch 如果是負整數就會盡可能的佔據空間, 而不看負整數的大小, 把 -2 改為 -12, 結果一樣的.

3.     mainsplitter->setstretchfactor(0, 0);

mainsplitter->setstretchfactor(1, 0);

效果同第二.

4.       mainsplitter->setstretchfactor(0, 0);  //可以把這段注釋掉, 效果一樣

mainsplitter->setstretchfactor(1, 1);

效果如下:

5.     mainsplitter->setstretchfactor(0, 4);

mainsplitter->setstretchfactor(1, 8);

效果如下:

6.     mainsplitter->setstretchfactor(0, -4);

mainsplitter->setstretchfactor(1, 8);

效果如下,

從 1, 2 和 6 的測試效果可以看出, 拉伸係數為負整數的微件將佔據最大的多餘空間.

從3, 4 和 5 的測試效果來看, 就算我們不設定 b 或 a 的拉伸係數stretch, 他們內部也應該存在著乙個預設拉伸系數值0. stretch為 0 的微件, 將把最大多餘空間讓給stretch 為正整數的微件. 如果有多個stretch 為正整數的微件, 他們的多餘空間的占有率由通過數字的比例來確定的.

注:因此,我的堆疊窗體程式中的

mainlayout

->setstretchfactor(

leftlist,1

);

mainlayout

->setstretchfactor(

stack,3

);

就是設定了list與stack比例為1:3。

5.設定訊息相應的訊號與槽:

connect(

leftlist

,signal

(currentrowchanged(

int)),

stack

,slot

(setcurrentindex(

int)));

都是控制項自帶的訊號與槽,這裡將其關聯起來,就達到了程式的設計效果:

更改第幾行就顯示第幾個label。

最後編譯執行:

Qt學習 堆疊窗體QStackedWidget類

下面用 實現上面視窗的設計 1.建立專案時基類選擇qdialog,取消gernerate form核取方塊的選中狀態。2.在標頭檔案dialog.h中編寫如下 include include include include class dialog public qdialog 3.在原始檔dial...

QT堆疊窗體之QStackedWidget

要實現乙個視窗位置,觸發式更換widget,可以採用堆疊窗體qstackedwidget。起初,剛接觸qt程式設計時,想到的方法是setparent 這個函式,通過設定父窗體來實現同一位置顯示不同介面。後來,發現qstackedwidget這個東東,問題得到了完美解決。列出部分 如下 void cl...

Qt之布局管理 堆疊窗體

qstackedwidget類繼承於qframe類,用於堆疊窗體的管理。public slots voidsetcurrentindex int index index引數的索引位置的部件,是可見的。index預設為 1,表示堆疊為空 voidsetcurrentwidget qwidget wid...