gpt4 book ai didi

c++ - sizer 是处理表单的好方法吗?

转载 作者:行者123 更新时间:2023-11-30 03:59:17 25 4
gpt4 key购买 nike

我正在将我的一个应用程序从旧的 GUI(我使用固定大小)转移到 wxWidgets(我试图学习 sizer 的基础)。

在应用程序中,我有几个结构非常复杂的表单。数据和工作流程的性质建议我将所有这些数据放在一个屏幕中。但此屏幕必须经过适当设计才能使用。

这是旧版本的表格...

form with fix layout

...这或多或少是我使用 sizer 可以想到的...

form with wxSizers

请注意,我不能简单地使用 wxGridSizer,因为一些小部件跨越整个行,一些其他小部件超出固定网格等。

显然我可以继续努力让它不那么难看,但我发现自己在想也许 sizer 不是做这件事的正确工具。为了实现我想要的,我需要类似于 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();

用户将设置每个小部件的相对大小,以完全阻挡表单的几何形状。为了在调整 Layout() 大小时使此几何形状适合 wxPanel 将计算适当的缩放因子 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;

等等(这只是一个划痕,把它当作一个粗略的想法;应该有机制来避免让所有东西都太小而无法适应小部件中的文本和/或相应地缩放字体大小等等) .

这看起来合理吗?你将如何面对这个话题?这个选择对我以后的发展影响很大,欢迎大家的解答、批评和评论

最佳答案

wxGridSizer 可能无法满足您的需求,但更灵活的类如 wxGridBagSizer应该做你想做的。此类允许您通过在调用 wxGridBagSizer::Add 时设置 wxGBSpan 来将项目设置为跨越多行和多列。

关于c++ - sizer 是处理表单的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26996792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com