QML标签偶尔延伸到屏幕外

时间:2016-09-16 01:14:49

标签: qt qml qt5 qtquickcontrols

我有一个基于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>稍微“拉长”。返回到其他选项卡会取消拉伸选项卡。

1 个答案:

答案 0 :(得分:0)

修复

设置Layout.maximumWidth(根据Velkan的评论)似乎可以解决问题。此外,它似乎使页面加载更快。

观察和测试

自从我将这一变化引入代码以来,现在已经过去了一周半,而且此后该产品已经过大量测试。

我们发现了第二个需要Layout.maximumWidth设置的组件,以防止屏幕伸展,实际上将这个修复程序应用于原始有问题的组件已经阻止了屏幕拉伸错误。所以这绝对是一个有效的解决方案。

可能的根本原因(即毫无根据的推测)

我怀疑QML引擎试图通过从最大宽度开始,然后缩小它们以适合(或类似的东西)来调整“布局”对象的大小。如果未设置最大宽度,则将其设置为“无穷大”。没有maximumWidth,似乎自动收缩操作有时会失败,使组件在屏幕外伸展。我怀疑自动调整大小代码可能受到某种非确定性的影响,其顺序是计算不同QML组件的大小。