作者buganini (霸格尼尼)
看板C_and_CPP
標題Re: [問題] 寫gui的程式碼架構
時間Wed Dec 28 22:49:20 2011
整理一下Glade跟GtkBuilder的歷史:
1) glade2的時代,產生C code呼叫gtk2的api
2) glade3<=3.8,還是用gtk2,但不產生code,
而是用libglade吃.glade並自動呼叫對應的gtk2 api,
如此得到容易跨語言的特性,並有VC分離的好處。
3) gtk2.12開始內建GtkBuilder,功能等同於libglade,並會在未來取代libglade,
但GtkBuilder跟glade的xml結構不一樣,可用gtk-builder-convert把.glade轉成
GtkBuilder的結構(extension通常就只是用.xml)
4) glade3>=3.10,改用gtk3(的元件),並支援直接儲存成GtkBuilder的xml
不過glade3最新版我用起來還是有些bug,偶爾需要手動改xml,還好讀回去是ok的;)
最近是用來寫這個(python寫的)
https://github.com/buganini/gbsdconv
不過code很亂,請小心服用XD
※ 引述《Arton0306 (Ar藤)》之銘言:
: 目前寫gui時常遇到一個問題
: 我現在以qt撰寫,用designer畫好ui之後
: 假設現在大視窗中有幾個部份(widget)
: 而某些事件會使得這些widget有些改變或者是widget中的某些地方改變
: 所以function的命名可能會變成下面這樣
: updateCheckedStateInWidgetXXX
: updateCheckedStateInWidgetYYY
: updateCheckedStateInWidgetZZZ
: clear123InWidgetYYY
: clear456InWidgetZZZ
: 也就是說如果不寫Widget名稱,很難看出這個function到底作用在哪個widget
: 加上widget名稱又顯得非常囉嗦
: 比較直覺的寫法應該是
: WidgetXXX->updateCheckedState()
: WidgetYYY->updateCheckedState()
: WidgetZZZ->updateCheckedState()
: WidgetYYY->clear123()
: WidgetZZZ->clear456()
: 但designer直接拉出來的widget沒辦法這樣寫
: 有想過可以自創物件把designer產生的widget ptr傳進去 這樣就可以模擬上方的寫法
: 或者是打從一開始就不要使用designer產生的code
: 請問大家採取的作法是什麼呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.131.149.15
※ 編輯: buganini 來自: 140.131.149.15 (12/28 22:57)
推 Bencrie:推 ... 我想你說的 bug 應該是寫入順序的問題對吧 XD 12/29 00:53
→ buganini:寫入順序? 我遇到的是grid的row/column會算錯或不能加 12/29 04:05
→ buganini:不過顯示跟xml是對得起來也應該是正確的 12/29 04:06
推 Bencrie:Adjustment 的預設數值和極限值寫入順序反了,GtkBuilder 12/29 08:39
→ Bencrie:在建 UI 的時候應該先設定最大值再設定預設值 12/29 08:41
→ buganini:找不到你說的設定耶? 我是用glade 3.10.2 12/29 14:38
推 Bencrie:像 SpinButton 那種可以綁 Adjustment 的 widget 12/29 21:55
→ Bencrie:Adjustment 可以調最大最小值和預設值,不過預設值就算設 12/29 21:56
→ Bencrie:了還是會變成 0,要自己去把 xml 裡的順序換掉才正常。 12/29 21:57
→ Bencrie:也許新版把這個 bug 修掉了也說不定 XD 12/29 21:57