gpt4 book ai didi

qt - QML ScrollView 不滚动

转载 作者:行者123 更新时间:2023-12-03 22:04:42 24 4
gpt4 key购买 nike

我需要使用 QML 创建一个长表单。窗体不适合窗口,所以我需要它是可滚动的。但是我无法让 ScrollView 工作。这是我的问题的最小工作示例:

import QtQuick.Window 2.2
import QtQuick 2.9
import QtQuick.Controls 2.3

Window {
visible: true
width: 1280
height: 720
title: qsTr("Hello World")

Rectangle{
anchors.centerIn: parent
width: parent.width*0.8;
height: parent.height*0.7;

ScrollView {
anchors.fill: parent
clip: true
contentHeight: parent.height

Rectangle{
id: rect1
width: parent.width
height: 200
color: "#ffff00"
anchors.horizontalCenter: parent.horizontalCenter
}

Rectangle{
id: rect2
width: parent.width
height: 500
color: "#ff00ff"
anchors.top: rect1.bottom
anchors.horizontalCenter: parent.horizontalCenter
}


Rectangle{
id: rect3
width: parent.width
height: 500
color: "#00ffff"
anchors.top: rect2.bottom
anchors.horizontalCenter: parent.horizontalCenter
}

}

}


}

据我了解,这应该允许我滚动以查看 3 个矩形。但是我只看到第一个和第二个的上半部分,我无法滚动。

任何帮助都会非常感谢

最佳答案

因为您的 ScrollView 包含多个项目,所以您需要注意 sizing自己设置 内容高度明确表示所有项目的组合高度。

为了进行测试,您可以将垂直滚动条设置为始终开启以查看内容高度如何影响滚动条。

我注释掉了水平中心 anchor 定,因为它不需要(矩形的宽度是 ScrollView 宽度)。

ScrollView {
anchors.fill: parent
clip: true
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
contentHeight: rect1.height+rect2.height+rect3.height

Rectangle{
id: rect1
width: parent.width
height: 200
color: "#ffff00"
//anchors.horizontalCenter: parent.horizontalCenter
}

Rectangle{
id: rect2
width: parent.width
height: 500
color: "#ff00ff"
anchors.top: rect1.bottom
//anchors.horizontalCenter: parent.horizontalCenter
}


Rectangle{
id: rect3
width: parent.width
height: 500
color: "#00ffff"
anchors.top: rect2.bottom
//anchors.horizontalCenter: parent.horizontalCenter
}

}

如果你用一个项目包裹你的矩形并设置项目 implicitHeight到它的高度 ScrollView 正确检测 contentHeight。
ScrollView {
anchors.fill: parent
clip: true
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
Item {
width: parent.width
height: rect1.height+rect2.height+rect3.height
implicitHeight: height
Rectangle{
id: rect1
width: parent.width
height: 200
color: "#ffff00"
}
Rectangle{
id: rect2
width: parent.width
height: 500
color: "#ff00ff"
anchors.top: rect1.bottom
}
Rectangle{
id: rect3
width: parent.width
height: 500
color: "#00ffff"
anchors.top: rect2.bottom
}
}
}

大多数项目的默认隐式大小是 0x0,这就是为什么您必须显式设置项目的隐式高度。但是,某些项目具有固有的隐式大小,例如图像和文本。这意味着,如果您放置例如TextArea 到您的 ScrollView 中,如果文本足够长,它将自动变为可滚动。
ScrollView {
anchors.fill: parent
clip: true
TextArea {
readOnly: true
text: online ? provider.loadedText : "Offline"
wrapMode: Text.WordWrap
}
}

关于qt - QML ScrollView 不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57878716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com