我正在研究一个简单的小部件系统,我现在正在实现一些容器。
以下是我发现自己的情况:
Widget
基类,一个Container
类,它是一个可以包含其他小部件的小部件,以及几个小部件子类,如Button
。Container
本身,绝对定位子项,以及Box
,它们将小部件彼此相邻堆叠,水平或垂直。到目前为止,它运作正常。但是现在我正在实施Box
:我做的是我覆盖从draw
继承的Container
函数,将它们全部绘制在一起,而不是基于在他们的x / y位置。很简单。
但事件处理现在完全没有了,因为小部件的x / y位置变得毫无意义。
我想我有两个选择:
Container
中的位置。 我认为第一个有点难看。第二个实现起来相当复杂,因为我需要对小部件中的位置变化作出反应。
如何对Qt,Gtk和wxWidgets等其他小部件系统进行解决?我看过其中一些的来源,但不能完全弄明白,它太复杂了。我没有任何调整大小或包装问题需要考虑。
答案 0 :(得分:1)
您正在尝试实施自己的布局系统。你应该期待它很难。 我建议不要使用第一种方法。窗口小部件的x,y坐标不仅由窗口小部件本身使用,而且还由容器外部的任何人使用,以便对窗口小部件执行某些操作。
第二个解决方案是我选择实现由几个较小的小部件组成的自定义小部件,如果你不需要太多的功能,它就不难拼凑起来。 只需将小部件添加到容器中,将其位置设置为当前空闲位置,然后转到下一个位置。