qt - 如何在 QtQuick 中对齐 ListView 中的项目

标签 qt qml qtquick2

我有以下水平列表:

BulletsListDelegate.qml

import QtQuick 2.0

Rectangle {
    width: 8
    height: 8

    color: "#808080"
    radius: width * 0.5
}

main.qml

import QtQuick 2.0

Item {
    width: 256
    height: 256

    ListModel {
        id: bulletsListModel

        ListElement {
            a: 'example'
        }
        ListElement {
            a: 'example'
        }
        ...
    }

    ListView {
        id: bulletsList

        spacing: 8
        orientation: ListView.Horizontal

        delegate: BulletsListDelegate {}
        model: bulletsListModel

        anchors.bottom: parent.bottom
        width: parent.width
    }
}

元素如下所示(它们是灰色的项目符号)

buttons

我希望它们显示在它们上方黑框(其父框)的水平中心。

是否有任何形式的集中或合理化列表中的项目?

最佳答案

所以,如果我正确理解你的问题,你希望在 ListView 中对齐项目的实例。使用ListView,这并不是那么容易实现的。如果项目数量不均匀,则可以使用preferredHighlightBegin 和preferredHighlightEnd 在ListView 中心设置一个项目大小的区域,然后将hightlightRangeMode 设置为ListView.StrictlyEnforceRange。您可以将 currentIndex 设置为指向索引,以便中间项将被视为当前项。这会将其置于您定义的范围内,因此位于中心。但是,当您拥有偶数个项目时,这不起作用,因此这是一种值(value)有限的黑客。

我的问题是:项目必须使用ListView来定位吗?看来您实际上根本不需要 ListView 的太多功能?如果您不需要 ListView 的其他功能(例如滚动),则可以使用 Repeater 代替。这允许您简单地将项目放入行定位器中,您可以将其宽度设置为 count*(delegateWidth+spacing)-spacing,高度等于您的委托(delegate)高度。然后,您可以使用 acnhors 将行定位到您喜欢的任何位置的中心。

关于qt - 如何在 QtQuick 中对齐 ListView 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58652338/

相关文章:

c++ - 在 main.cpp 之外使用 QQuickView

qml - 如何在不使用 MouseArea 的情况下更改光标的形状?

QtCreator Build 不会更新设计表单中的 UI 更改

c++ - 如何在 QStackedLayout 中居中小部件?

qt-creator - QML 项目的 QtCreator 中未启用“运行”按钮

qt - 是否可以在 vscode 中调试 qml?

qt - 从另一个 QML 文件访问 TextField

qt - QML从子目录导入样式文件

qt - 将文件从应用程序拖到资源管理器。我的应用程序可以复制吗?

qt - phantomjs 用 webGL 编译