【问题标题】:Use MouseArea to change StackLayout Item使用 MouseArea 更改 StackLayout 项
【发布时间】:2019-12-31 10:27:54
【问题描述】:

如何使用 MouseArea 更改 StackLayout 中的项目?

MouseArea {
           id: mouseAreaServerSetup
           anchors.fill: parent
           onClicked:{
                     // change Iten serverSetupPage
                     }
           }

MouseArea {
           id: mouseAreaClientSetup
           anchors.fill: parent
           onClicked: {
                      // change Iten clientSetupPage
                      }
           }

StackLayout {
             anchors.fill: parent
             currentIndex: menuConfig.currentIndex
             Item {
                  id: serverSetupPage
                  Rectangle {
                            color: "red"
                            }
                  }
             Item {
                  id: clientSetupPage
                  Rectangle {
                            color: "yellow"}
                            }
                   }
             }

这个想法是,当您单击鼠标区域时,您会更改选项卡项

谢谢

【问题讨论】:

    标签: qml stacklayout mousearea


    【解决方案1】:

    解决办法是使用条件式

    MouseArea {
      id: mouseAreaServer
      anchors.fill: parent
      hoverEnabled: true
      onClicked: {
       if(stackLayoutMain.currentIndex!=0){
           stackLayoutMain.currentIndex = 0
        }
     }
    }
    

    下一个 MouseArea..

    onClicked: {
    if(stackLayoutMain.currentIndex!=1){
           stackLayoutMain.currentIndex = 1
      }
    }
    

    还有其他人

    onClicked: {
    if(stackLayoutMain.currentIndex!=n){
           stackLayoutMain.currentIndex = n
      }
    }
    

    【讨论】:

      【解决方案2】:

      你必须从你的 stackLayout 分配currentIndex,所以我给了它一个id。然后每次鼠标点击我都会增加currentIndex,直到达到项目数(count)。

      MouseArea {
          id: mouseAreaClientSetup
          anchors.fill: parent
          onClicked: {
              stackLayoutMain.currentIndex = (stackLayoutMain.currentIndex + 1) % stackLayoutMain.count
          }
      }
      
      StackLayout {
          id: stackLayoutMain
          anchors.fill: parent
          currentIndex: 0
      
          Item {
              id: serverSetupPage
              Rectangle {
                  anchors.fill: parent
                  color: "red"
              }
          }
          Item {
              id: clientSetupPage
              Rectangle {
                  anchors.fill: parent
                  color: "yellow"}
          }
      }
      

      顺便说一句,我让矩形填充了它们的父级(即StackLayout),因此您将能够实际看到它们,它们的默认大小为 (0,0)。

      我不知道你为什么放了两个MouseArea,因为第一个会被第二个完全重叠,你永远无法访问serverSetupPage。这也涉及您可能遇到的另一个问题,如果您不再只显示黄色的红色Rectangle(很可能是今天;-))并实施另一个MouseArea,那么新的将与切换选项卡的重叠。

      所以页面切换最好通过添加TabBarTabButton 来完成,这将告诉您将打开哪个页面。像这样的:

      TabBar {
          TabButton {
              text: "server"
              onClicked: stackLayoutMain.currentIndex = 0
          }
          TabButton {
              text: "client"
              onClicked: stackLayoutMain.currentIndex = 1
          }
      }
      

      【讨论】:

      • 谢谢,您的想法可行,但只需一个按钮即可将项目更改为项目。有什么方法可以将 MouseArea 1 关联到 Item 1 并将 MouseArea 2 关联到 item 2 ??
      • 请理解 MouseArea 不是视觉对象,您已将它们锚定以填充父级,这使得 MouseArea 1 与 MouseArea 2 重叠,扩展后不再起作用。看看我给的 TabBar 解决方案
      • Amdasis,谢谢,我已将 mouseArea 与图像相关联。图片 { 来源:“images/MediaDestSetup_off.svg” 宽度:290 高度:50 文本 { id:nameMediaDestinationText 颜色:“#b5d1db” 文本:qsTr(“MEDIA DESTINATION”) font.pointSize:10 } MouseArea { id:mouseAreaMediaDestination 锚点。填充:父onClicked:{}}
      • 好的,那也很好,下次提示:在问题中包含这样的细节。现在的问题的方式,让你似乎不了解锚
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多