ScrollablePage的QT高度问题

时间:2017-03-02 08:48:09

标签: qt menu qml drawer

我试图自定义Qt抽屉菜单(https://doc.qt.io/qt-5/qtquickcontrols2-gallery-gallery-qml.html)。 我所做的主要更改是通过单独的视图ProjectList替换Pane块:

StackView {
    id:homeView
    anchors.fill: parent

    initialItem:ProjectsList{
    }
    }
}

ProjectList.qml:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls.Material 2.0

ScrollablePage {
    id:projectsListPage

    ListView {
        id: listView2
        anchors.fill: parent

        delegate: ItemDelegate {
            width: parent.width
            text: model.title
        }

        model: ListModel {
            ListElement { title: qsTr("2Projects list2j") }
            ListElement { title: qsTr("Projects liste") }
            ListElement { title: qsTr("Projects listr") }
            ListElement { title: qsTr("Projects list3") }
        }

    }
}

不幸的是,我只能看到列表中的一行,其他行是隐藏的,但我可以滚动它。请帮帮我,用ScrollView填充整个页面(高度属性不是工作:()

ScrollablePage:

import QtQuick 2.7
import QtQuick.Controls 2.0

Page {
    id: page

    default property alias content: pane.contentItem

    Flickable {
        anchors.fill: parent
        contentHeight: pane.implicitHeight
        flickableDirection: Flickable.AutoFlickIfNeeded

        Pane {
            id: pane
            width: parent.width
        }

        ScrollIndicator.vertical: ScrollIndicator { }
    }
}

1 个答案:

答案 0 :(得分:0)

首先:ListView本身是Flickable所以它本身可以滚动。现在,您在Flickable内打包Flickable,这似乎既不必要又有问题。

Flickable的外ScrollablePage的大小由height的{​​{1}}确定,Pane的高度由Pane的大小 - 即0.因此很明显,这不起作用。 您可以将ListView的高度设置为自己的ListView,这样可以正常工作,但是您已经加载了所有元素,并且不再有动态创建和销毁的利润。

如果我理解正确,您希望页面尽可能大,但最大大小为contentItem.height的父级。

我建议您不要使用StackView,而应使用常见的ScrollablePage,并直接打包Page。让ListView填充ListView并将Page设置为Page.implicitHeight或类似的内容。

你肯定必须为Math.max(parent.height, listView.contentItem.height)设置一个大小,因为它没有提供有意义的implicitHeight !!!