qt布局管理1.設定widget的在父窗體中的座標和大小widget->move(x,y);
widget->resize(width,height);
//widget->setgeometry(qrect(x,y,width,height));
什麼時候用:不想被布局約束,對這種控制項可控制時
缺點:在遇到很多個部件時,乙個個算座標會很麻煩
部件不自動隨父窗體的變化而變化(這裡要重寫resizeevent事件算變化比例建立父子窗體之間的聯絡,而布局很容易做到)
2.布局管理layout(可控制的部件不要使用布局中,一旦改變會影響到整體布局)
經常要用到的三個布局部件
qhboxlayout水平布局
qvboxlayout垂直布局
qgridlayout**布局
qhboxlayout和qvboxlayout用法相同
基本:vlayout->addwidget(w1);
vlayout->addwidget(w2);
layout->addwidget(widget,row,column,rowspan,columnspan);layout->addlayout(layout,row,column,rowspan,columnspan);
(row,column):控制項佔據左上角的單元格位置
rowspan:控制項佔據的行數
columnspan:控制項佔據的列數(不寫預設為1)
控制項隨窗體伸縮
將布局與主窗體建立聯絡
layout=new qhboxlayout(this);
或者this->setlayout(layout);
layout->addstretch();可伸縮的空間
layout->setalignment(qt::alignhcenter);//布局內控制項水平居中
layout->setspacing(10);//控制項間隔為10
layout->setmargin(10);//頁邊距為10
qt設計器中spacer控制項
以上在對控制項位置調整時常用
結合sizepolicy屬性控制布局管理中的控制項的尺寸自適應方式
也就是控制項隨主窗體伸縮方式(可自行增大或縮小)
qsizepolicy sizepolicy(qsizepolicy::expanding, qsizepolicy::expanding);//可自行增大和收縮
fixed:不能放大或縮小
minimum:不能小於sizehint尺寸,可放大(若設定了最大尺寸)
maximum:不能放大,可縮小到允許的最小尺寸(若setminimumsize(10,10)只能縮小到(10,10))
preferred:控制項的sizehint是他的hint,可以放大或縮小
比例因子的使用
例:布局中有左右兩控制項,右邊比左邊水平伸縮2倍
sizepolicy.sethorizontalstretch(1);
sizepolicy.setverticalstretch(0);
left->setsizepolicy(sizepolicy);
sizepolicy.sethorizontalstretch(2);
sizepolicy.setverticalstretch(0);
left->setsizepolicy(sizepolicy);
水平伸展比例(1,2)
垂直伸展比例(0,0)
qtqhboxlayout *topleftlayout = new qhboxlayout;提供了在視窗元件上管理子視窗元件的管理方式:
1.絕對位置方式:通過基類
qwidget
提供的setgeometry()
設定子視窗元件的大小及其在父視窗的位置。缺點:不能調整子視窗大小,不能隨父視窗大小改變而改變,子視窗大小和文字可能會被截斷,程式設計師需要不斷計算子視窗大小和位置。
2.手工布局方式:也是通過基類
qwidget
提供的setgeometry()
設定子視窗元件的大小及其在父視窗的位置。不過它與第一種不同,它是通過過載
qwidget::resizeevent(qresizeevent*)
函式來實現。當父視窗改變時子視窗會做出相應改變。但是它仍然需要程式設計師手工計算。
3.布局管理器方式:這是最好的
qt布局管理方式,它主要提供了
4中方式:
(1)水平布局管理器:
qhboxlayout,
按水平方向組織視窗元件
(2)垂直布局管理器:
qvboxlayout,
按垂直方向組織視窗元件
(3)網格布局管理器:
qgridlayout,
按二維網格方式組織視窗元件
(4)棧布局管理器:
qstackedlayout,
按照類似於棧的方式組織視窗元件,在某一時刻只有乙個視窗元件是可見的,
qt沒有提供對該布局管理器的支援,但是提供了乙個棧部件,
qstackedwidget
,可以使用它來實現棧布局管理器。
布局(layout
)qhboxlayout
從左到右水平排列
qvboxlayout
從上到下豎直排列
qgridlayout
把各個視窗排列在乙個網格裡
在上面的例子中,使用其中的兩個布局管理器,水平和垂直布局管理器。下面的圖是以上**布局管理後的乙個圖
對照這個圖與上面的**分析一下是怎麼實現這樣的布局的。
topleftlayout->addwidget(label);
topleftlayout->addwidget(lineedit);
首先建立水平布局,然後再在最上面左邊新增兩個元件:
label
,lineedit
qvboxlayout *leftlayout = new qvboxlayout;
leftlayout->addlayout(topleftlayout);
leftlayout->addwidget(casecheckbox);
leftlayout->addwidget(backwardcheckbox);
然後又建立垂直布局,然後再把上面的水平布局新增到該垂直布局的最上面,接著新增兩個元件:
casecheckbox
,backwardcheckbox。
qvboxlayout *rightlayout = new qvboxlayout;
rightlayout->addwidget(findbutton);
rightlayout->addwidget(closebutton);
rightlayout->addstretch();
接著建立了乙個垂直布局,新增兩個元件:
findbutton
,closebutton
,之後加入了拉伸係數,也可以叫彈簧,因為就像彈簧一樣把這些元件頂起來,可以試試在
findbutton
和closebutton
直接加入彈簧看看是什麼結果。
qhboxlayout *mainlayout = new qhboxlayout;
mainlayout->addlayout(leftlayout);
mainlayout->addlayout(rightlayout);
setlayout(mainlayout);
最後,又建立了乙個水平布局,在這個水平布局中新增了前面建立的後兩個布局:水平布局和垂直布局。之後就設定布局管理器,
setlayout()
,引數是布局管理器名。
布局管理器就說這麼多,後面還會提到。布局管理器在
qt中非常實用。
下面是該例項的總體類關係圖:
彙編基礎學習17
文章 http www.mcany.cn article 292.htm 博主 沒落的殘陽 這節講來下test指令。和相應的跳轉指令所依據的標誌位。首先我們來學習test指令。test指令在每對運算元的對應資料位之間進行隱含的 與 操作,並設定標誌位,但不修改目的運算元。這點和cmp指令有點相似。t...
QT學習基礎1
qt是一套跨平台的gui開發庫 c 整合開發環境 gui 將介面元素定義為對應的類,通過抽象和封裝可以隱藏介面元素的細節程式建立過程就是組合不同介面元素物件的過程。gui程式開發 中用程式建立視窗及視窗元素,在訊息處理函式中根據訊息做出不同的相應。gui程式執行時會建立乙個訊息佇列,系統核心將使用者...
QT學習 基礎知識
qt把它所支援的平台分兩級,第一級是重點支援的,第二級次之 第一級平台 platform compilers linux 32 and 64 bit gcc 4.2 microsoft windows xp gcc 4.4 mingw 32 bit msvc 2003,2005 32 and 64 ...