【发布时间】:2014-11-18 14:34:19
【问题描述】:
我正在将我的应用程序从旧的 GUI(我使用固定大小的地方)转移到 wxWidgets(我正在尝试学习 sizers 的基础)。
在应用程序中,我有几个结构相当复杂的表单。数据和工作流程的性质建议我将所有这些数据放在一个屏幕上。 但是这个屏幕必须经过适当的设计才能使用。
这是旧版本的表单...
...这或多或少是我使用 sizers 可以想出的...
请注意,我不能简单地使用 wxGridSizer,因为一些小部件跨越整个行,其他一些则脱离固定网格等。
显然我可以继续努力让它变得不那么难看,但我发现自己认为也许 sizers 不是正确的工具。为了实现我想要的,我需要类似于 wxGridSizer 的东西,具有某种 colspan/rowspan 机制,也许这还不够。
所以我开始考虑自己构建一个“Form Sizer”,它可能类似于
int w,h;
GetClientSize(&w,&h);
MyFormSizer *formSizer(w,h);
formSizer->SetDimension( widget1, 100, 20 );
formSizer->SetDimension( widget2, 500, 20 );
formSizer->newRow();
formSizer->SetDimension( widget3, 100, 20 );
formSizer->SetDimension( widget4, 250, 20 );
formSizer->SetDimension( widget5, 250, 20 );
formSizer->Layout();
用户将设置每个小部件的相对大小,以完全阻止表单的几何形状。为了使这个几何图形在调整大小时适合 wxPanel Layout() 将计算适当的缩放因子 f 然后将设置所有大小和位置做类似的事情
widget1->SetSize(CalculatedX, CalculatedY, 100/f, 20/f);
CalculatedX+=100/f;
widget2->SetSize(CalculatedX, CalculatedY, 500/f, 20/f);
CalculatedX+=0;
CalculatedY+=20/f;
等等(这只是一个划痕,把它当作一个粗略的想法;应该有机制来避免让所有东西都太小而无法适应小部件中的文本和/或相应地缩放字体大小等等) .
这看起来合理吗?你会如何面对这个话题?这个选择会影响我以后的发展,欢迎大家回答、批评和评论
【问题讨论】: