当编写类似网格的对话框时,我经常碰巧需要多个具有相同结构的列,只有在运行时才能知道列数(想想同一类对象的多个实例的配置参数)。
在这种情况下,常规Qt小部件设计师不尽如人意,因为虽然我可以轻松地设计各种标题和原型列"但是没有简单的方法来复制这种列的创建运行时(所有小部件都在setupUi
中一起创建,并且没有简单的方法来克隆QWidget
)。
另一种选择可能是拆分"原型列"在单独的自定义窗口小部件中(使用QVBoxLayout
对齐子窗口小部件)并在父对话框中在运行时实例化此类自定义窗口小部件,将这些实例放在QHBoxLayout
中。
这种方法的问题在于,不同列的小部件可能最终水平未对齐,因为每个QVBoxLayout
自己执行计算而不考虑其他列,因此所需的网格布局很容易搞砸。
唯一想到的另一种可能性是如上所述将原型列拆分为单独的小部件,而不是将自定义小部件放在QHBoxLayout
中,"窃取"它的子节点并将它们正确地对齐在父QGridLayout
中。这会产生所需的图形效果,但重新定义子项并隐藏自定义窗口小部件感觉有点像黑客。
现在,我的问题有两个:
QGridLayout
子窗口小部件与" main"合并的方法。网格,但似乎没有这样的东西。