Qt 当前项居中的简单路径视图

Qt 当前项居中的简单路径视图,qt,qml,carousel,Qt,Qml,Carousel,我刚刚开始用QML编程,我需要用一些图像制作一个简单的旋转木马。我发现最简单的方法就是使用PathView。根据这一点,我试图使当前项目位于视图的中心,但失败了。这是我完成的代码 Rectangle { id: rectangle height: 200 color: "#00000000" Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter Layout.fillWidth: true Pat

我刚刚开始用QML编程,我需要用一些图像制作一个简单的旋转木马。我发现最简单的方法就是使用PathView。根据这一点,我试图使当前项目位于视图的中心,但失败了。这是我完成的代码

Rectangle {
    id: rectangle
    height: 200
    color: "#00000000"
    Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
    Layout.fillWidth: true

    PathView {
        id: carouselView
        anchors.fill: parent
        model: listModel

        delegate: Image {
            width: PathView.isCurrentItem ? 256 : 128
            height: PathView.isCurrentItem ? 256 : 128
            source: iconSource
        }
        path: Path {
            startX: 0
            PathLine {
                x: 800
                y: 0
            }
        }
        Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
    }
}

ListModel {
    id: listModel
    ListElement {
        iconSource: "qrc:///images/chair.svg"
    }
    ListElement {
        iconSource: "qrc:///images/chair.svg"
    }
    ListElement {
        iconSource: "qrc:///images/chair.svg"
    }
    ListElement {
        iconSource: "qrc:///images/chair.svg"
    }
}
理想的效果是一个简单的水平旋转木马,其中有一个居中的当前项目。
使用的当前版本:5.6

下面是一个使用PathView的简单转盘示例:

导入QtQuick 2.9
导入QtQuick.Controls 2.2
应用程序窗口{
可见:正确
宽度:640
身高:640
组成部分{
id:代表
项目{
宽度:200;高度:200
比例:PathView.iconScale
不透明度:PathView.iconCapity
z:PathView.iconoder
图像{anchors.fill:parent;源:modelData}
}
}
路径视图{
id:视图
锚定。填充:父级
下边距:150
上边距:50
pathItemCount:7
preferredHighlightBegin:0.5//
PreferredHighlighted:0.5//,该值应位于当前项的中心
highlightRangeMode:PathView.StrictlyEnforceRange//
型号:
[
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
]
代表:代表
路径:路径{
startX:0;startY:view.height/2
路径属性{name:“iconScale”;值:0.2}
路径属性{name:“IConCapacity”;值:10.2}
路径属性{name:“iconOrder”;值:0}
路径线{x:view.width/2;y:view.height/2}
路径属性{name:“iconScale”;值:1.2}
路径属性{name:“IConCapacity”;值:1}
路径属性{name:“iconOrder”;值:8}
路径线{x:view.width;y:view.height/2}
}
}
}

当然,如果确实要将当前项目放置在视图的中心,只需更改路径,即将起点移动到中心等。

下面是一个使用PathView的简单转盘示例:

导入QtQuick 2.9
导入QtQuick.Controls 2.2
应用程序窗口{
可见:正确
宽度:640
身高:640
组成部分{
id:代表
项目{
宽度:200;高度:200
比例:PathView.iconScale
不透明度:PathView.iconCapity
z:PathView.iconoder
图像{anchors.fill:parent;源:modelData}
}
}
路径视图{
id:视图
锚定。填充:父级
下边距:150
上边距:50
pathItemCount:7
preferredHighlightBegin:0.5//
PreferredHighlighted:0.5//,该值应位于当前项的中心
highlightRangeMode:PathView.StrictlyEnforceRange//
型号:
[
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
"http://placeimg.com/200/200/any?rand=“+Math.random(),
]
代表:代表
路径:路径{
startX:0;startY:view.height/2
路径属性{name:“iconScale”;值:0.2}
路径属性{name:“IConCapacity”;值:10.2}
路径属性{name:“iconOrder”;值:0}
路径线{x:view.width/2;y:view.height/2}
路径属性{name:“iconScale”;值:1.2}
路径属性{name:“IConCapacity”;值:1}
路径属性{name:“iconOrder”;值:8}
路径线{x:view.width;y:view.height/2}
}
}
}

当然,如果你真的想把当前项目放在视图的中心,你只需要改变路径,即移动起始点到中心等。< /P>如果我移动起点(屏幕中间的StestX),我的左边没有任何图像,我想要。你的例子很好,但我希望我的旋转木马是二维的,而不是三维的。我怎样才能做到这一点?你只需要根据你的意愿改变路径。我已经改变了示例,现在检查它。是的,现在它们都居中了。与我的示例相同的结果是:所有图像都显示在一行上,但currentItem(或selected item)不在中间,它始终位于左侧!我已经阅读了文档,看起来我已经找到了解决方案。看我编辑的答案。如果我移动起点(屏幕中间的StestX),我的左边没有任何图像,我想要。你的例子很好,但我希望我的旋转木马是二维的,而不是三维的。我怎样才能做到这一点?你只需要根据你的意愿改变路径。我已经改变了示例,现在检查它。是的,现在它们都居中了。与我的示例相同的结果是:所有图像都显示在一行上,但currentItem(或selected item)不在中间,它始终位于左侧!我已经阅读了文档,看起来我已经找到了解决方案。请看我的答案。