我正在研究一個簡單的小部件系統,現在我正在實施一些容器。容器/佈局如何重新定位他們的孩子?
這裏是我發現自己的情況:
- 我有一個
Widget
基類,一類Container
,這是一個可以包含其它小部件,和幾個小部件的子類,比如Button
。 - 我有兩種類型的容器:
Container
本身,它定位兒童絕對和Box
,這將堆疊部件彼此相鄰,水平或垂直。 - 每個控件在x = 0,y = 0處繪製自己。因此,在小部件被告知繪製自己之前,容器需要爲繪圖上下文添加一個偏移量。
- 每個小部件根據它的x/y位置進行自己的命中測試。
到目前爲止,它工作正常。但是現在我正在執行Box
:我所做的是我覆蓋了從Container
繼承的draw
函數,將它們全部並排繪製,而不是基於它們的x/y位置。非常簡單。
但事件處理現在完全關閉,因爲小部件的x/y位置已變得毫無意義。
我想我有兩個選擇:
- 有小部件的位置x = 0,y = 0的做命中測試,就像畫。然後重新計算鼠標位置以匹配
Container
中的位置。 - 將每個佈局設置爲x/y爲其子項,並讓孩子再次在x/y位置繪製自己。沒有更多的補償的繪圖環境
第一個是有點難看,我認爲。第二個實現起來相當複雜,因爲我需要對小部件中的位置更改做出反應。
如何像Qt,Gtk和wxWidgets等其他小工具系統通常解決這個問題?我已經看過其中一些的來源,但不能完全弄清楚,它太複雜了。我沒有任何重新調整或包裝問題需要考慮。