是否需要在父对话框的QGridLayout中合并子窗口小部件的QGridLayout?

时间:2015-11-03 16:37:22

标签: c++ qt qt-designer qtwidgets

当编写类似网格的对话框时,我经常碰巧需要多个具有相同结构的列,只有在运行时才能知道列数(想想同一类对象的多个实例的配置参数)。

desired result

在这种情况下,常规Qt小部件设计师不尽如人意,因为虽然我可以轻松地设计各种标题和原型列"但是没有简单的方法来复制这种列的创建运行时(所有小部件都在setupUi中一起创建,并且没有简单的方法来克隆QWidget)。

另一种选择可能是拆分"原型列"在单独的自定义窗口小部件中(使用QVBoxLayout对齐子窗口小部件)并在父对话框中在运行时实例化此类自定义窗口小部件,将这些实例放在QHBoxLayout中。

这种方法的问题在于,不同列的小部件可能最终水平未对齐,因为每个QVBoxLayout自己执行计算而不考虑其他列,因此所需的网格布局很容易搞砸。

enter image description here

唯一想到的另一种可能性是如上所述将原型列拆分为单独的小部件,而不是将自定义小部件放在QHBoxLayout中,"窃取"它的子节点并将它们正确地对齐在父QGridLayout中。这会产生所需的图形效果,但重新定义子项并隐藏自定义窗口小部件感觉有点像黑客。

现在,我的问题有两个:

  • 我可能没有意识到这些儿童小部件的快乐重新定位的潜在问题,因为他们的"假的"容器是不是要对它们做任何特别的事情?
  • 有没有更好的方法解决这个问题?理想情况下,我会考虑将QGridLayout子窗口小部件与" main"合并的方法。网格,但似乎没有这样的东西。

0 个答案:

没有答案