wxWidgets布局,通常就是wxBoxSizer,当然还有别的Sizer,就像Qt中的Layout一样,各种布局管理类。只是如今的wxWidgets尚未发展起来,一般其他的你用的比较少,因为这个最简单,最容易布局,其他的不好控制,虽然也能实现效果,但麻烦的很,而且除非你仅仅只是自己做着玩,不然别搞,不然后面你想要弄个什么边距,加个什么图片,设置些好看的效果,会有一堆事儿,然后由于时间原因,你还得重头来过,这才是我劝你纯粹练习用用就行了,别当真,毕竟wxWidgets还没发展起来,这玩意儿不好用。所以,你就好好看懂我这篇文章,足够你应付大多数项目了,往往最简单最容易扩展。
简单地说,第一点:wxWidgets布局,就是wxBoxSizer+wxPanel一起去分类摆放其他控件。wxPanel就跟Qt中的QWidget一样,充当其他控件的容器,背景板。总之当你布局有麻烦的时候,就想想怎么用panel来分配空间。
第二点:wxBoxSizer是可以嵌套使用的。布局器boxSizer,gridSizer等都是可以嵌套使用的,不过,不建议你嵌套,因为wxWidgets和Qt不一样的地方在于,QtCreator界面设计器是可以自动布局的,所以你可以很轻松地把布局任务交给QtCreator,但wxWidgets不能自动布局,但凡你布局嵌套比较复杂,以后可有的你愁的了,所以,尽量单一,使用boxsizer和panel即可。
第三点,xrc界面(即类似Qt的UI界面,xml文件),wxs界面,以及codelite的wxcraft界面,其本质就是生成cpp界面类文件,CodeBlocks上的wxSmith界面设计器,wxFormBuilder,wxCrafter界面设计器各有千秋,但wxFormBuilder界面设计器更加具有性价比,因为它还可以直接生成多种语言的代码文件,譬如python,lua,php,堪称神器,也让界面表示层的价值显得尤为突出,一个界面多种语言代码,确实极其方便。
第4点,也是最重要的一点,比起Qt的方便,在wxWidgets中,布局管理器中的子界面想要访问父界面元素,或者与父界面通信,或者仅仅只是布局,一定要注意,子界面的parent是谁,qt里面我们通常一个this,到哪都可以布局,但在wxWidgets中不行,如果你的构造函数里的parent是panel,那就只是panel,若是parent是Button,而你想要访问该界面所在的panel界面元素,那就是爸爸的爸爸,GetParent()->GetParent(),这里要尤其分清和注意。父界面一定是先创建的,然后子界面的构造函数里的parent才能够使用父界面对象指针作为parent,不然会出错。