如何在QML

时间:2018-03-21 04:41:35

标签: qt qml

我创建了一个带有自定义滚动条的列表视图。在列表视图中,滚动图像将由列表容器调整大小。滚动条的高度将更改取决于列表数据的大小。在我的情况下我想显示原始图片,其中srollbar的高度无法更改。然后打印出高度数据。这是我的代码,

ScrollBar {
    id: bar       
    implicitHeight: 780 //the size of the original image
    implicitWidth: 33
    contentItem: Image {
        id: sb
        source:"1.png"
    }       
}
Keys.onPressed: { console.log(bar.implicitWidth)}

我使用 implicitHeight 来重置高度。它可以改变高度。 然而,当我将其设置为780(原始图像的高度)时,结果显示高度为560(高度取决于列表数据)。我需要将implicitHeight设置为大于780的值(如1000,我不知道如何计算准确值)。然后高度的结果将显示为780.为什么?

然后我尝试了这段代码,

ScrollBar {
    id: ba     
    Component.onCompleted: console.log(bar.size)
    contentItem:
        Rectangle {
        implicitWidth: 780
        implicitHeight: 33
        Image {
        id: scrollBar
        source:"1.png"
        }
    }
}

这次,结果显示高度为780!但是,我无法使用id访问,我不知道如何打印出高度。

所以,我的问题

  1. 两种情况之间的差异是什么?为什么在第一种情况下高度不准确?
  2. 如果我使用第二种方法,如何通过键盘访问(更改)高度数据?

1 个答案:

答案 0 :(得分:0)

ScrollBar中,contentItem会根据其长度需要管理的范围自动调整大小。如果它是水平滚动条,则implicitHeight将成为contentItem的height,并更改宽度,对于垂直滚动条,则相反。

在您的示例中,这是相同的。在这两种情况下,height的{​​{1}}都会发生变化 但由于contentItem的大小不是取决于其父级,在第二种情况下,它不会关心该父级的任何大小调整,并保持其隐式宽度和高度。

也许这个例子可以帮助你理解关系:

Image