(Windows上为QtQuick 2.12)
我在GridLayout
对象上遇到两个相关问题,都围绕使用Layout.fillWidth
和Layout.fillHeight
来获取大小固定的单元格,它们的内容可以锚定到它们。我相信它们也适用于RowLayout
和ColumnLayout
。
首先,我的一些孩子使用Layout.columnSpan
或Layout.rowSpan
。但是,当我这样做时,即使多余的列或行被“占用”,fillWidth
或fillHeight
似乎也不适用于多余的列或行。如果这是W.A.D,我无法想象为什么有人会用这种方式D.-对我来说似乎是个错误。我的“解决方案”是创建虚拟项目,以强制填充其他列或行。但这并非没有问题。例如,如果我有一个包含五列的GridLayout
,并且我想附加一个五列宽的子级(例如,在第一行中为标题),而其他一些列则未被占用,我可以创建一个虚拟Item
,其Layout
属性设置为占据这些列。但是,如果找不到行,这些行之间没有任何内容,则该项目与我要显示的实际项目之一发生冲突。这个“有效”,但它在日志中产生了一条错误消息,例如QGridLayoutEngine::addItem: Cell (0, 4) already taken.
顺便说一句,我发现我只需要插入足够的虚拟单单元格项目即可定义所有网格边界。在上面的示例中,我将在第1列和第3列中需要一个虚拟对象,因为这足以定义边界0-1、1-2、2-3和3-4:
0 1 2 3 4
+---------------------------------------+
| colSpan = 5 |
+-------+-------+-------+-------+-------+
| dummy | | dummy |
+-------+ +-------+
第二,我在GridLayout
上指定了一个间距,但是有时我想要一个双倍宽的间距,因此我将其视为没有任何内容的另一行或一列,因此应该为零高度或宽度。但是当我这样做时,我没有得到多余的间距-好像行或列不存在一样。同样,W.A.D。?但为什么?我的“解决方案”是将一个虚拟商品放置在设置了Layout.fillWidth
的空行中,但显然不要放置Layout.fillHeight
(对于空列则相反)。
这些都是丑陋的骇客,它们会破坏源代码,而且容易出错。有谁对如何做这些事情有更好的主意吗?有人认为它们可以被称为错误吗?