QML 中的堆栈布局

Posted

技术标签:

【中文标题】QML 中的堆栈布局【英文标题】:StackLayout in QML 【发布时间】:2020-11-26 09:53:46 【问题描述】:

要求:我正在 QML 中构建一个设置应用程序,其中我已将屏幕划分为一个网格。在网格的左侧,有按钮:主页、连接、设置和退出。在右侧,应绘制相应的显示。目前,我添加了一个矩形,当我点击主页、设置、连接等按钮时......写在StackLayout矩形内的代码执行成功。

我不想在矩形中编写代码,而是想在单独的文件中编写代码,例如 settings.qml、connectivity.qml。

如何通过点击按钮和设置当前索引来调用不同的文件

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.3

ApplicationWindow 
id:main1
visible: true
x:0
y:20
width: Screen.width
height: Screen.height
title: qsTr("Settings")

GridLayout 
    id: gridLayout
    width: parent.width
    height:main1.height
    columns: 2


    Rectangle 
       id: left_rect
       width: Screen.width/4
       height: gridLayout.height
       color:"yellow"

       Button 
           id: button
           text: qsTr("Home")
           anchors.right: parent.right
           anchors.rightMargin: 5
           anchors.left: parent.left
           anchors.leftMargin: 5
           anchors.top: parent.top
           anchors.topMargin: 5
           onClicked: 
              layout.currentIndex =  0
           
       

       Button 
           id: button1
           x: 1
           y: -4
           text: qsTr("Connectivity")
           anchors.topMargin: 59
           anchors.leftMargin: 5
           anchors.left: parent.left
           anchors.top: parent.top
           anchors.rightMargin: 5
           anchors.right: parent.right
           onClicked: 
               layout.currentIndex =  1
           

       

       Button 
           id: button2
           x: 5  
           y: -8
           text: qsTr("Settings")
           anchors.topMargin: 112
           anchors.leftMargin: 5
           anchors.left: parent.left
           anchors.top: parent.top
           anchors.rightMargin: 5
           anchors.right: parent.right
           onClicked: 
               layout.currentIndex =  2
           
       

       Button 
           id: button3
           x: 6
           y: -16
           text: qsTr("Quit")
           anchors.topMargin: 172
           anchors.leftMargin: 5
           anchors.left: parent.left
           anchors.top: parent.top
           anchors.rightMargin: 5
           anchors.right: parent.right
           onClicked: 
              Qt.quit()
           

       

  

   Rectangle 
       id: right_rect
       width: ( Screen.width/4 )*3
       height: Screen.height
       color:"green"

       StackLayout 
          id: layout
          anchors.fill: parent
          currentIndex: 0
          
          Rectangle 
                color: 'teal'
                implicitWidth: 200
                implicitHeight: 200
          
          Rectangle 
                color: 'plum'
                implicitWidth: 300
                implicitHeight: 200
          
          Rectangle 
                color: 'orange'
                implicitWidth: 300
                implicitHeight: 200
            
        
    

【问题讨论】:

也许这有帮助:***.com/questions/22168457/… 【参考方案1】:

你目前在哪里

Rectangle 
            color: 'teal'
            implicitWidth: 200
            implicitHeight: 200

替换为

qmlClassName 
              id: someId

【讨论】:

以上是关于QML 中的堆栈布局的主要内容,如果未能解决你的问题,请参考以下文章

Blackberry 10 Cascades、qml (C++ & QT) 中的布局存在问题

如何为 QML 布局中的项目指定特定间距?

qml demo分析(rssnews-常见新闻布局)

QML 布局没有正确的高度

如何为嵌入在另一个堆栈视图中的堆栈视图设置顶部布局约束?

列数可变的 QML 中继器和 QML 网格布局