QT布局實踐1 布局雛形

2021-08-16 01:55:41 字數 3953 閱讀 9116

一直以來對布局感覺get不到點,最近就花點時間來實踐一下,弄乙個純手動布局的介面。力求做到全適應。

做乙個介面慢慢加東西把,大概是下面圖的樣子,紅色區域隨意伸縮,綠色區域也是,但是寬度有最大值和最小值。藍色和橙色是固定的高,只能進行左右伸縮。 

大概就是先在qhboxlayout1 中加入紅綠,qhboxlayout2中加入藍橙,然後再qvboxlayout 把 qhboxlayout1 和qhboxlayout2 都加進去,最後設為主視窗的布局。

qhboxlayout

*abovelayout=

newqhboxlayout

();

abovelayout->addwidget(widget_display);
this->setlayout(abovelayout);
當我這樣寫,發現報錯了,就是attempting to set qlayout "" on mainwindow "mainwindow",which already

has a layout 。

這個是 很重要的,mainwindow其實已經自帶有布局了,參考

解決方法:

第一步建立乙個qwidget例項,並將這個例項設定為centralwidget。

第一步建立乙個主布局mainlayout,並把所需要的所有控制項都往裡面放(工具欄、選單欄、狀態列除外)。

最一步就是將widget的布局設定為mainlayout。

現在完成的雛形,4個格仔,每個格仔拉伸都是一樣的。

接下來就是要進行布局的比例設定了。

縮放因子:stretch。這東西可以說是比例,比較易懂。

參考大神的

例如我拉伸視窗的時候,紅綠的比例要一直為5:1,那麼我可以這樣寫

abovelayout->setstretch(0,5);
abovelayout->setstretch(1,1);
在布局中設定,第乙個引數為layout新增的widget的順序,我這裡0 就是紅色了。

上半部分和下班部分佔比為10:1,類似同上:

alllayout->addlayout(abovelayout,10);
alllayout->addlayout(belowlayout,1);
比例設定完後,還可以設定大小縮放的策略。

策略:sizepolicy 。也就是縮放的方法選擇。常量值

描述qsizepolicy::fixed

0預設大小是唯一可以接收的改變,因此部件不能放大也不能縮小。

qsizepolicy::minimum

growflag

預設大小是最小值,並且是充分的。部件允許擴充套件,但是並不傾向擴充套件(例如:水平方向上的按鈕),不能比預設大小提供的大小更小。

qsizepolicy::maximum

shrinkflag

預設大小是最大值,假如其它部件需要空間並且不會破壞該部件,那麼該部件允許被縮小(例如:乙個分割線)。

qsizepolicy::preferred

growflag | shrinkflag

預設大小是最佳效果,部件允許放大或縮小,但不傾向於擴充套件比sizehint()大(qwidget的預設策略)。

qsizepolicy::expanding

growflag | shrinkflag | expandflag

預設大小是合理的大小,但部件允許縮小並且可用。部件可以利用額外的空間,因此它將會得到盡可能多的空間(例如:水平方向上的滑塊)。

qsizepolicy::minimumexpanding

growflag | expandflag

預設大小是最小值,並且是足夠的。部件允許使用額外空間,因此它將會得到盡可能多的空間(例如:水平方向上的滑塊)。

qsizepolicy::ignored

shrinkflag | growflag | ignoreflag

預設大小將會被忽略,部件將會得到盡可能多的空間。

由於我需要紅色盡量的大,綠色不要變太多,寫成:

qsizepolicy

displaysizepolicy=

widget_display->sizepolicy();

qsizepolicy

listsizepolicy=

widget_list->sizepolicy();

displaysizepolicy.sethorizontalpolicy(qsizepolicy::expanding);
widget_display->setsizepolicy(displaysizepolicy);
listsizepolicy.sethorizontalpolicy(qsizepolicy::preferred);
widget_list->setsizepolicy(listsizepolicy);
給紅色設定expanding,給綠色設定preferred。

有時又不想每個格仔變得太大或太小,可以設定他們的最大值和最小值。例如:

widget_list->setmaximumwidth(250);
widget_list->setminimumwidth(250);
完成大概是這樣的:

附上這一步的原始碼:

#ifndef

mainwindow_h

#define

mainwindow_h

#include

#include

#include

#include

#include

#include

#include

#include

class

mainwindow

:public

qmainwindow

;
#endif

//mainwindow_h

#include

"mainwindow.h"

mainwindow::mainwindow(qwidget

*parent)

:

qmainwindow(parent)

mainwindow::~mainwindow()
void

mainwindow::ui_init()

void

mainwindow::setui_above(qvboxlayout

*alllayout)

void

mainwindow::setui_below(qvboxlayout

*alllayout)

Qt 布局管理1

最近在學習qt的基礎知識。看了一些自定義qwidget外觀方法,當初步接觸一些qt布局的一些知識後感覺到很困惑。不知道各位博友有沒有這樣的困惑。1.對於qt的qwidget而言重要的就是互動。互動需要考慮兩種重要因素 外觀 行為。在qt中行為是由事件觸發的,當然qt又提供了訊號與槽機制來方便qwid...

Qt之布局管理 (1)基本布局管理

qt提供的布局類以及他們之間的繼承關係 如下圖 常用到的布局類有 qhboxlayout qvboxlayout qgridlayout三種,分別是水平排列布局 垂直排列布局 排列布局。常用的方法有addwidget 和addlayout addwidget 用於在布局中插入控制項,addlayou...

Qt的布局 部件布局

qt提供了幾個類使得部件布局更加簡單。qgroupbox qbuttongroup qsplitter qwidgetstack 1 qgroupbox類 用於在部件周圍繪製乙個框架。可以在框架的上端新增一些描述資訊。qgroupbox groupbox new qgroupbox this gro...