我有一个基于QML的GUI,其固定宽度在几个地方使用TabView
类型。
在一个页面上,我有类似的东西(除了横向锚点外,大多数属性除外):
ColumnLayout {
MyTabsViewSubmenu { // defined below
Layout.fillWidth: true
Tab {
id: someId
title: someString
anchors.fill: parent
SomeCustomClass {
id: someId2
anchors.fill: parent
}
}
// three more tabs defined the same way, with the same anchors...
}
// another item below the tabs...
}
MyTabsViewSubmenu
是这样的:
TabView {
Rectanble {
anchors.fill: parent
}
style: TabViewStyle {
// miscellaneous style stuff
}
}
上面ColumnLayout
中的四个标签中的一个有时会在选中后拉伸屏幕。据我所知,与整个GUI中用作选项卡的其他项目相比,它没有没有特别之处。此选项卡的布局如下:
Item {
MyTabsViewSubmenu {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: sibling.top
Tab {
// no anchors (see below)
SomeItem {
anchors.fill: parent
}
// ... other tabs....
}
Rectangle {
id: sibling
anchors.left: parent.left
anchors.right: parent.right
// ... stuff....
}
}
整个页面延伸到屏幕:子标签内容和Rectangle
中的内容我在此处显示为sibling
。
我怀疑最内层anchors.fill: parent
中可能缺少的Tab
可能是问题所在,除了sibling
不是(就我而言)我可以告诉*错过任何锚点,而且我从未看到屏幕在屏幕外伸展,而sibling
也不会在屏幕外拉伸。
拉伸是否发生或布局是否正确完全似乎完全无法预测。一旦布局从屏幕上拉开,我有时可以通过离开该页面然后返回来进行自我纠正。
我在Debian 7上使用Qt 5.6.1-1。
编辑:当我导航到“拉伸”标签并且导致拉伸的错误时,页面顶部的标签 也< / em>稍微“拉长”。返回到其他选项卡会取消拉伸选项卡。
答案 0 :(得分:0)
设置Layout.maximumWidth
(根据Velkan的评论)似乎可以解决问题。此外,它似乎使页面加载更快。
自从我将这一变化引入代码以来,现在已经过去了一周半,而且此后该产品已经过大量测试。
我们发现了第二个需要Layout.maximumWidth
设置的组件,以防止屏幕伸展,实际上将这个修复程序应用于原始有问题的组件已经阻止了屏幕拉伸错误。所以这绝对是一个有效的解决方案。
我怀疑QML引擎试图通过从最大宽度开始,然后缩小它们以适合(或类似的东西)来调整“布局”对象的大小。如果未设置最大宽度,则将其设置为“无穷大”。没有maximumWidth
,似乎自动收缩操作有时会失败,使组件在屏幕外伸展。我怀疑自动调整大小代码可能受到某种非确定性的影响,其顺序是计算不同QML组件的大小。