先看乙個常用的圖,如下:
左邊是導航欄,右邊是資訊區。
中間可以自由拉伸。
xml如下:
xml version="1.0" encoding="utf-8" standalone="yes"sepwidth 全稱為 seperator width,分隔條的寬度。這個值分正值、負值,正值表示分隔條在右邊,負值表示分隔條在左邊。?>
<
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
>
sepimm 全稱為 separate immediately,立即拉伸,即滑鼠一移動,馬上就設定layout的大小。
duilib似乎有乙個bug,就是當左邊被拖到寬度為0時,它為自動還原為原始大小。為了解決這個bug,我們需要設定它的最小寬度,minwidth=」1」,這樣bug就不存在了咯。
解決這個bug的時候,你也已經知道,如何限制左邊的layout的大小了吧,maxwidth,如果設定了這個屬性,指定了最大寬度,那它就會限制在一定大小了。以下的xml,讀者可作測試:
xml version="1.0" encoding="utf-8" standalone="yes"這裡要說明乙個非常重要的規則:如果分隔條是豎條的,|,那分隔條屬性為sepwidth,它的layout必須是horizontallayout,即水平布局,因為只有水平布局被水平拉伸才是合理的。?>
<
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
>
如果分隔條是橫條的,一,那分隔條屬性為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...