Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Qt5.2QML应用程序中实现分页_Qt_Pagination_Qml - Fatal编程技术网

如何在Qt5.2QML应用程序中实现分页

如何在Qt5.2QML应用程序中实现分页,qt,pagination,qml,Qt,Pagination,Qml,我正在尝试制作一个一次显示3页的应用程序。中央页面显示3个矩形,显示sql查询结果1-3,左侧页面是指向查询结果4中图像的链接,右侧页面也是从同一查询生成的,并且具有不同的布局。现在,我无法将这3个页面放入一个listmodel中,并使用pathview使其看起来像一个分页器,因为所有3个页面都不一致,实际上不是一个模型,因此给了我错误ListElement:不能包含嵌套元素。我正在粘贴下面的代码。我只希望用户能够在页面之间切换,无论是涉及到pathview还是statechange,都可以进行

我正在尝试制作一个一次显示3页的应用程序。中央页面显示3个矩形,显示sql查询结果1-3,左侧页面是指向查询结果4中图像的链接,右侧页面也是从同一查询生成的,并且具有不同的布局。现在,我无法将这3个页面放入一个listmodel中,并使用pathview使其看起来像一个分页器,因为所有3个页面都不一致,实际上不是一个模型,因此给了我错误ListElement:不能包含嵌套元素。我正在粘贴下面的代码。我只希望用户能够在页面之间切换,无论是涉及到pathview还是statechange,都可以进行适当的转换,以模拟页面的切换:

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
import "content"


Rectangle{
    property ListModel mainModel
    id: tripleView
    visible: true
    width: 800
    height: 1400

    PathView {
        model: mainModel
        delegate: mainDelegate
        id: paginator
        preferredHighlightBegin: 0.5
        preferredHighlightEnd: 0.5

        anchors.fill: parent
        path: Path {

            startX: -tripleView.width * mainModel.count / 2 + tripleView.width / 2;
            startY: tripleView.height / 2
            PathLine {
                x: tripleView.width * mainModel.count /2 + tripleView.width / 2
                y: tripleView.height * .5 }
        }
    }

    Component {
        id: mainDelegate

        Rectangle {
        width: tripleView.width
        height: tripleView.height
        }
    }

    ListModel {
        id: regionsModel
        ListElement {

            name: "Stomach"
        }
        ListElement {
            name: "Lung"
        }
        ListElement {
            name: "Colorectal"
        }
        ListElement {
            name: "Pancreas"
        }
        ListElement {
            name: "Urinary Bladder"
        }

    }

    ListModel {
        id: mainModel
        ListElement{
            Rectangle{
                id: tnmPage
                width: parent.width
                height: container.height


                Rectangle {
                    id: menu
                    z: 2
                    width: parent.width  ;
                    height: 75



                    Component {

                        id: appDelegate
                        Rectangle {
                            width: genericText.width + 10; height: parent.height
                            id: wrapper
                            color: PathView.isCurrentItem ? "yellow" : "white"
                            Text {
                                id: genericText
                                height: parent.height
                                font.pointSize: 12
                                verticalAlignment: Text.AlignVCenter
                                //                anchors.topMargin: wrapper.top
                                color: wrapper.PathView.isCurrentItem ? "red" : "black"
                                text: name
                            }

                            MouseArea {
                                //  width:parent.width; height: parent.height
                                anchors.fill: parent
                                hoverEnabled: true
                                onClicked: {
                                    var List = mWindow.printi(name)
                                    t.content = List[1]
                                    node.content = List[2]
                                    mets.content = List[3]
                                    view.currentIndex = index


                                }

                            }
                        }
                    }



                    PathView {
                        id: view
                        width: 2500
                        height: parent.height
                        anchors.rightMargin: 18
                        anchors.bottomMargin: 0
                        anchors.leftMargin: -18
                        anchors.topMargin: 0
                        anchors.fill: parent
                        //        anchors.bottom: parent.bottom
                        //        anchors.top: parent.top
                        //        preferredHighlightBegin: .1
                        //        preferredHighlightEnd: .6

                        highlightRangeMode: PathView.StrictlyEnforceRange
                        //        anchors.rightMargin: 0
                        //        anchors.bottomMargin: 0
                        //        anchors.leftMargin: 2
                        //        anchors.topMargin: -71

                        z: 1
                        highlight: Component {
                            Rectangle {
                                color: "yellow"
                                visible: PathView.onPath

                            }
                        }

                        focus: true
                        model: regionsModel
                        delegate: appDelegate

                        path: Path {

                            startX: 0; startY: view.height *.5
                            PathLine { x: menu.width; y: view.height * .5 }
                        }


                    }
                }



                Flickable {
                    id: flick

                    anchors.topMargin: menu.bottom
                    width: parent. width
                    height: parent. height - menu.height
                    contentWidth: parent.width+200
                    contentHeight: container.height // this is calculated on amount of text
                    PinchArea {
                        width: Math.max(flick.contentWidth, flick.width)
                        height: Math.max(flick.height, flick.height)
                        pinch.minimumScale: 0.5
                        pinch.maximumScale: 3

                        property real initialWidth
                        property real initialHeight
                        x: 0
                        y: 0
                        //![0]
                        onPinchStarted: {
                            initialWidth = flick.contentWidth
                            initialHeight = flick.contentHeight
                            flick.interactive = false
                        }
                        onPinchUpdated: {
                            t.fontSize = t.size*pinch.scale
                            node.fontSize = node.size * pinch.scale
                            mets.fontSize = mets.size * pinch.scale

                        }

                        onPinchFinished: {
                            flick.returnToBounds()
                            flick.interactive = true
                        }



                        Rectangle {
                            id: container

                            MouseArea {
                                anchors.fill: parent
                                onDoubleClicked: {

                                    t.fontSize = 12
                                    node.fontSize = t.size
                                    mets.fontSize = t.size
                                }


                            }


                            anchors.top: flick.top
                            width: parent.width
                            height: t.height + node.height + mets.height

                            StageBox {
                                id: t
                                anchors.top: container.top
                                color: "#6acbd3"
                            }

                            StageBox {
                                id: node
                                anchors.top: t.bottom
                                color: "#1fd77b"
                            }
                            StageBox {
                                id: mets
                                anchors.top: node.bottom
                                color: "blue"
                            }
                        }
                    }


                }
            }

}

我意识到上面的代码很长,但我想它会让我了解我想要实现的目标。到目前为止,我发现的示例都是显示图像的简单页面,没有嵌套。谢谢你的帮助。

试试QML-typeVisualitemodel。祝你好运

我已经成功破解了。这个flickable在彩色矩形中实验性地实现,它的行为就像一个3页的应用程序,从页面中间开始,允许水平flicking访问相邻的页面。它的作品,我相信与一些调整,它可以适应类似的应用程序作为我的。欢迎评论

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0


Rectangle {
    state: "baseState"
    id: mainScreen
    width: 400
    height: 600


    Text {
        z:2
        id: logTxt
        height: 10
        width: 20
        function log(txt){
            text = txt+"\n"
        }
    }
    Flickable {
        boundsBehavior: StopAtBounds


        id: flick
        y: 48
        onContentXChanged: {
            if(flick.contentX>100 && mainScreen.state=="baseState" && flick.flickingHorizontally){
                logTxt.log(flick.contentX)
                mainScreen.state="State1"


            }


            if(flick.contentX<-100 && mainScreen.state=="baseState" && flick.flickingHorizontally){
                mainScreen.state="State2"
                logTxt.log(flick.contentX)

            }

            if(flick.contentX>100 && mainScreen.state=="State2" && flick.flickingHorizontally ){
                mainScreen.state="baseState"

                logTxt.log(flick.contentX)
                flick.contentX=0

            }


            if(flick.contentX<-100 && mainScreen.state=="State1" && flick.flickingHorizontally){
                logTxt.log(flick.contentX)
                mainScreen.state="baseState"


                flick.contentX=0

                logTxt.log(flick.contentX)
                Timer


            }

        }

        interactive: true
        width: 400
        height: 600
        transformOrigin: Item.Center
        flickableDirection: Flickable.HorizontalFlick

        Rectangle {
            width: 600

            height: 600
            id: container


            Rectangle {
                id:two
                visible: false
                x: 0
                z:3

                height: 600
                width: 400
                color: "grey"

            }
            Row{
                id: testGrid
                x:0
                visible: true


                y: 0
                z: 3

                width:600
                height: 600


                Rectangle {
                    id: a
                    anchors.top:parent.top

                    color:"#f6f7b1"
                    visible: true
                    z: 3
                    height: parent.height
                    width: 200
                }
                Rectangle {
                    id: b
                    anchors.top:parent.top

                    color:"#ffebeb"
                    visible: true
                    height: parent.height
                    width: 200
                }

                Rectangle {
                    id: c
                    y: -35
                    anchors.top:parent.top

                    color:"#b1d5f7"
                    height: parent.height
                    width: 200
                }

            }

            Rectangle {
                id: three
                visible: false
                z:2

                x:0
                height: parent.height
                width: 400
                color: "#028000"



            }



        }
    }
    states: [
        State {
            name: "State1"



            PropertyChanges {
                target: testGrid
                visible: false
            }

            PropertyChanges {
                target: two
                visible: true
            }

            PropertyChanges {
                target: three
                visible: false
            }
        },
        State {
            name: "State2"

            PropertyChanges {
                target: testGrid
                visible: false
            }

            PropertyChanges {
                target: three
                visible: true
            }
            PropertyChanges {
                target: two
                visible: false
            }

        },
        State {
            name: "baseState"


            PropertyChanges {

                target: testGrid
                visible: true
            }

            PropertyChanges {
                target: three
                visible: false
            }
            PropertyChanges {
                target: two
                visible: false
            }

        }
    ]
}
导入QtQuick 2.0
导入QtQuick.Controls 1.0
导入QtQuick.Layouts 1.0
长方形{
国家:“基本国家”
id:主屏幕
宽度:400
身高:600
正文{
z:2
id:logTxt
身高:10
宽度:20
函数日志(txt){
text=txt+“\n”
}
}
轻快的{
boundsBehavior:StopAtBounds
id:flick
y:48
OnContentExchange:{
if(flick.contentX>100&&mainScreen.state==“baseState”&&flick.flickingHorizontally){
logTxt.log(flick.contentX)
mainScreen.state=“State1”
}
if(flick.contentX100&&mainScreen.state==“State2”&&flick.flickingHorizontally){
mainScreen.state=“baseState”
logTxt.log(flick.contentX)
flick.contentX=0
}

如果(flick.contentXI)做了一个迂回的方法,但你的解决方案是最好的方法。为什么这个答案被否决了?该页面上发布的示例似乎正是OP想要的?