Duilib教程 自動布局3 分隔條

2022-03-09 12:22:20 字數 2989 閱讀 8582

先看乙個常用的圖,如下:

左邊是導航欄,右邊是資訊區。

中間可以自由拉伸。

xml如下:

xml version="1.0" encoding="utf-8" standalone="yes" 

?>

<

window

size

="695,542"

>

<

horizontallayout

width

="695"

height

="542"

bkcolor

="#ffa0a0a4"

>

<

horizontallayout

width

="200"

bkcolor

="#ff008080"

sepwidth="6" sepimm="true"

/>

<

horizontallayout

bkcolor

="#ffa6caf0"

/>

horizontallayout

>

window

>

sepwidth 全稱為 seperator width,分隔條的寬度。這個值分正值、負值,正值表示分隔條在右邊,負值表示分隔條在左邊。

sepimm 全稱為 separate immediately,立即拉伸,即滑鼠一移動,馬上就設定layout的大小。

duilib似乎有乙個bug,就是當左邊被拖到寬度為0時,它為自動還原為原始大小。為了解決這個bug,我們需要設定它的最小寬度,minwidth=」1」,這樣bug就不存在了咯。

解決這個bug的時候,你也已經知道,如何限制左邊的layout的大小了吧,maxwidth,如果設定了這個屬性,指定了最大寬度,那它就會限制在一定大小了。以下的xml,讀者可作測試:

xml version="1.0" encoding="utf-8" standalone="yes" 

?>

<

window

size

="695,542"

>

<

horizontallayout

width

="695"

height

="542"

bkcolor

="#ffa0a0a4"

>

<

horizontallayout

minwidth

="50"

maxwidth

="300"

width

="200"

bkcolor

="#ff008080"

sepwidth

="6"

sepimm

="true"

/>

<

horizontallayout

bkcolor

="#ffa6caf0"

/>

horizontallayout

>

window

>

這裡要說明乙個非常重要的規則:如果分隔條是豎條的,|,那分隔條屬性為sepwidth,它的layout必須是horizontallayout,即水平布局,因為只有水平布局被水平拉伸才是合理的。

如果分隔條是橫條的,一,那分隔條屬性為sepheight,它的layout必須是verticallayout,即垂直布局,因為只有垂直布局被垂直拉伸才是合理的。

所以,在上面的xml中,如果你將左邊的layout換成verticallayout,你會發現分隔條無效,因為verticallayout根本沒有sepwidth屬性。

在設定橫條的分隔條時,需要設定minheight、maxheight屬性,這樣便於控制其大小。sepheight為正時,表示分隔條在下方,為負時,表示在上方。

下面我貼乙個擁有上下、左右分隔條的xml,同時包含正負值。

Duilib教程 自動布局2

在上一節中,我簡單介紹了控制項隨父layout自由移動的設定。在這一節,我將介紹一種常見的情況 嵌入視窗。uimanager.cpp 第750行 case wm size event.type uievent windowsize event.psender m pfocus event.dwtim...

Duilib教程 自動布局1

我們要實現乙個帶標題欄和狀態列的程式,同時要支援拉伸,即包括最小化 最大化,圖如下 在duidesigner中,拖動視窗邊框,即可看到效果,標題欄和狀態列的位置都不變,即隨視窗大小而改變。看屬性,發現,status和title都有屬性 height,而中間的,什麼屬性都沒有。在視窗設定如下 可以知道...

Duilib教程 自動布局2

在上一節中,我簡單介紹了控制項隨父layout自由移動的設定。在這一節,我將介紹一種常見的情況 嵌入視窗。uimanager.cpp 第750行 case wm size event.type uievent windowsize event.psender m pfocus event.dwtim...