Qt學習筆記 Widget布局管理

2022-09-15 10:45:10 字數 2669 閱讀 6532

以《c++ gui programming with qt 4, second edition》為參考

例項:查詢對話方塊

包含三個檔案,finddialog.h,finddialog.cpp及main.cpp。

**#ifndef finddialog_h

#define finddialog_h

#include

class qcheckbox;

class qlabel;

class qlineedit;

class qpushbutton;

class finddialog : public qdialog

;#endif

注釋:class finddialog : public qdialog表示繼承的對話方塊,在qt中qdialog是乙個常用到的類。

q_object是乙個巨集,是訊號槽所必須的,在使用訊號槽時,在類的開始要使用這個巨集,否則在編譯時候會出錯。

接下來定義了訊號和槽,對於訊號和槽以後會詳細介紹。

**#include

#include "finddialog.h"

finddialog::finddialog(qwidget *parent)

: qdialog(parent)

void finddialog::findclicked()

else

}void finddialog::enablefindbutton(const qstring &text)

在finddialog.cpp中主要就是實現了訊號與槽的關聯以及布局管理。這裡主要說明一下布局管理。

qt提供了在視窗元件上管理子視窗元件的管理方式:

1.絕對位置方式:通過基類qwidget提供的setgeometry() 設定子視窗元件的大小及其在父視窗的位置。缺點:不能調整子視窗大小,不能隨父視窗大小改變而改變,子視窗大小和文字可能會被截斷,程式設計師需要不斷計算子視窗大小和位置。

2.手工布局方式:也是通過基類qwidget提供的setgeometry() 設定子視窗元件的大小及其在父視窗的位置。不過它與第一種不同,它是通過過載qwidget::resizeevent(qresizeevent*)函式來實現。當父視窗改變時子視窗會做出相應改變。但是它仍然需要程式設計師手工計算。

3.布局管理器方式:這是最好的qt布局管理方式,它主要提供了4中方式:

(1)水平布局管理器:qhboxlayout,按水平方向組織視窗元件

(2)垂直布局管理器:qvboxlayout,按垂直方向組織視窗元件

(3)網格布局管理器:qgridlayout,按二維網格方式組織視窗元件

(4)棧布局管理器:qstackedlayout,按照類似於棧的方式組織視窗元件,在某一時刻只有乙個視窗元件是可見的,qt沒有提供對該布局管理器的支援,但是提供了乙個棧部件,qstackedwidget,可以使用它來實現棧布局管理器。

在上面的例子中,使用其中的兩個布局管理器,水平和垂直布局管理器。下面的圖是以上**布局管理後的乙個圖

對照這個圖與上面的**分析一下是怎麼實現這樣的布局的。

qhboxlayout *topleftlayout = new qhboxlayout;

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中非常實用。

下面是該例項的總體類關係圖:

可以根據上述**體會一下。

最後的是mian**

// main.cpp**

#include "finddialog.h"

QT學習筆記 3 布局

moc meta object compiler,元物件編譯器 先對 qt 源 進行一次預處理。元物件系統基於三個方面 1.qobject類 為objects提供了乙個可以利用元物件系統的基類。2.q object巨集 宣告在類的私有部分,該巨集可以啟用元物件特性,例如 動態屬性 訊號與槽。3.me...

學習筆記之Widget

widget 微件 小組件 1 新建layout檔案 對於widget的布局檔案有限制!不是所有的元件都能夠使用的。容器類檢視目前只支援四種 linearlayout,relativelayout,framelayout,gridlayout 容器類目前支援的檢視元件 analogclock 模擬時...

QT筆記 布局

1 qt中使用布局器qlayout布局 2自動計算各個空間的大小和位置 採用的既定policy策略來調整子視窗的大小和位置 3qhboxlayout橫向布局 qvboxlayout縱向布局 使用三部曲 1 建立控制項物件 2 建立布局器 3 使用布局器 mywin.h 1 ifndef mywin ...