1

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

期望的结果

在这种情况下,常规的 Qt 小部件设计器就不够用了,因为虽然我可以轻松地设计各种标题和“原型列”,但没有简单的方法可以在运行时复制此类列的创建(所有小部件都是一起创建的) in setupUi,并且没有简单的方法来克隆QWidgets)。

另一种方法可能是将“原型列”拆分为单独的自定义小部件(使用 a 对齐子小部件QVBoxLayout)并在运行时在父对话框中实例化此类自定义小部件,将这些实例放在QHBoxLayout.

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

在此处输入图像描述

想到的唯一另一种可能性是将原型列拆分为单独的小部件,如上所述,但不是将自定义小部件放入 a 中,而是QHBoxLayout“窃取”其子级并将它们正确对齐在 parent 中QGridLayout。这会产生所需的图形效果,但是重新设置子元素并隐藏自定义小部件感觉有点像 hack。

现在,我的问题是双重的:

  • 考虑到他们的“假”容器不会对它们做任何特别的事情,我可能没有意识到在愉快地重新设置这些子小部件的潜在问题吗?
  • 有没有更好的方法来解决这个问题?理想情况下,我会考虑一些将QGridLayout子小部件与“主”网格合并的方法,但似乎没有这样的事情。
4

0 回答 0