Re: [問題] 寫gui的程式碼架構

看板C_and_CPP作者 (霸格尼尼)時間13年前 (2011/12/28 14:49), 編輯推噓3(307)
留言10則, 2人參與, 最新討論串2/3 (看更多)
整理一下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)

12/29 00:53, , 1F
推 ... 我想你說的 bug 應該是寫入順序的問題對吧 XD
12/29 00:53, 1F

12/29 04:05, , 2F
寫入順序? 我遇到的是grid的row/column會算錯或不能加
12/29 04:05, 2F

12/29 04:06, , 3F
不過顯示跟xml是對得起來也應該是正確的
12/29 04:06, 3F

12/29 08:39, , 4F
Adjustment 的預設數值和極限值寫入順序反了,GtkBuilder
12/29 08:39, 4F

12/29 08:41, , 5F
在建 UI 的時候應該先設定最大值再設定預設值
12/29 08:41, 5F

12/29 14:38, , 6F
找不到你說的設定耶? 我是用glade 3.10.2
12/29 14:38, 6F

12/29 21:55, , 7F
像 SpinButton 那種可以綁 Adjustment 的 widget
12/29 21:55, 7F

12/29 21:56, , 8F
Adjustment 可以調最大最小值和預設值,不過預設值就算設
12/29 21:56, 8F

12/29 21:57, , 9F
了還是會變成 0,要自己去把 xml 裡的順序換掉才正常。
12/29 21:57, 9F

12/29 21:57, , 10F
也許新版把這個 bug 修掉了也說不定 XD
12/29 21:57, 10F
文章代碼(AID): #1E-onoMm (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1E-onoMm (C_and_CPP)