這些窗體都比較類似,相對簡單,就沒什麼可以深入研究的了。
下面用**實現上面視窗的設計:
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然後將三個相應的label放入其中:=new
qstackedwidget
(this
);
stack->addwidget(
label1
);
stack->addwidget(
label2
);
stack4.設定主窗體布局時,用到了布局管理器。這裡用到的是水平排列窗體qhboxlayout:->addwidget(
label3
);
qhboxlayout*mainlayout
=new
qhboxlayout
(this
);
這個布局管理器用法為:×對話方塊邊距設為5
mainlayout×內部控制項間距為5->setmargin(
5);
mainlayout->setspacing(
5);
×對於setstetchfactor函式,借用別的文章說明(5.設定訊息相應的訊號與槽:這裡講得是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就是設定了list與stack比例為1:3。->setstretchfactor(
stack,3
);
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...