我之前在这里问过如何在 Qt/QML 中实现 Master Details View:How to implement a master-details view Qt/QML on an Android tablet? .
在继续研究这个问题后,我得出了以下样机 QML 布局:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.4
Item {
y: 50
Layout.fillHeight: true
width: appWindow.width
RowLayout {
id: mainLayout
anchors.fill: parent
ListModel {
id: navigation
ListElement {
item: "Item 1"
}
ListElement {
item: "Item 2"
}
ListElement {
item: "Item 3"
}
ListElement {
item: "Item 4"
}
ListElement {
item: "Item 5"
}
ListElement {
item: "Item 6"
}
ListElement {
item: "Item 7"
}
ListElement {
item: "Item 8"
}
ListElement {
item: "Item 9"
}
ListElement {
item: "Item 10"
}
ListElement {
item: "Item 11"
}
}
ScrollView{
Layout.fillHeight: true
verticalScrollBarPolicy: Qt.ScrollBarAlwaysOn
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
ListView {
id: listview
Layout.fillHeight: true
Layout.preferredWidth: 300
contentWidth: 300
model: navigation
delegate: Rectangle {
id: wrapper
width: 300
height: 50
Text {
id: itemInfo
text: item
color: "red"
}
}
}
}
Rectangle {
x: 300
y: 50
Layout.preferredWidth: appWindow.width - listview.width-4
height: appWindow.height - 50
color: "green"
border.width: 1
}
}
}
主视图本质上是一个带有多个项目的 ListView(每个项目代表一个可选元素,这将触发详细信息视图的更新,当前由绿色矩形表示(见下面的附加截图)
目前我仍然有以下几点问题:
我应该如何修改布局以使 ListView 覆盖整个屏幕高度?
当我“滚动”通过 ListView 时,我注意到很多屏幕闪烁?我怎样才能最小化这个?
如何防止显示整个上部状态栏(显示电池电量等设备系统信息的位置)?
编辑:通过在 ScrollView 中添加 ListView 来修改代码。在这种情况下,ScrollView 的高度与屏幕高度相同,这也是我想要的(减去顶部 50 的偏移量,见下图)。我认为 ListView 的行为符合预期,并且没有占用其项目更多的空间。
现在需要实现的是改变 SrollView 的 Background 颜色,使其与 ListView 颜色相匹配。在这种情况下,它看起来好像 ListView 占据了整个空间。