2014-02-25 79 views
4

我有一個嵌套的滾動型,類似於以下QML:嵌套滾動型的QML不響應鼠標滾輪

import QtQuick 2.0 
import QtQuick.Controls 1.1 

Rectangle { 
    width: 200 
    height: 600 

    ScrollView { 
     id: sView 
     anchors.fill: parent 
     ListView { 
      id: list 
      boundsBehavior: Flickable.StopAtBounds 
      clip: true 
      focus: true 
      interactive: true 
      model: 5 
      delegate: Component { 
       MouseArea { 
        id: hoverArea 
        width: 100 
        height: 200 
        onClicked: list.currentIndex = index; 

        Rectangle { 
         id: fauxParent 
         anchors.fill: parent 
         border.width: 1 
         border.color: "black" 

         Rectangle { 
          anchors.top: parent.top 
          anchors.left: parent.left 
          height: parent.height 
          width: parent.width/2 
          border.width: 1 
          border.color: "purple" 
          color: "green" 
          Text { 
           anchors.centerIn: parent 
           text: "stuff" 
          } 
         } 
         ScrollView { 
          //parent: sView 
          anchors.top: fauxParent.top 
          anchors.right: fauxParent.right 
          height: fauxParent.height 
          width: fauxParent.width/2 

          ListView { 
           model: 3 
           delegate: Component { 
            Rectangle { 
             radius: 10 
             height: 100 
             width: 100 
             color: "blue" 
            } 
           } 
          } 
         } 
        } 
       } 
      } 

     } 
    } 
} 

它似乎正常運行,除了滾動型內將不會對鼠標滾輪響應:外部ScrollView攔截該事件。我在研究中發現的唯一解決方法是將內部滾動視圖的父級直接設置爲外部滾動視圖(取消註釋parent: sView行)。不幸的是,這將所有五個scrollview委託放置在外部滾動視圖的右上角。看起來ScrollView根據其父項定位自己?

爲了記錄,我的實際應用程序正在將大部分頁面包裝在滾動視圖中,以便允許用戶訪問可能超出當前窗口大小的部分。不過,本節的內容針對各種不同的目的有各種不同的控制,包括一些滾動視圖。所以我也會接受一種替代方法來移動一些對窗口來說太大的通用內容。

這是一個Windows桌面應用程序,所以我不需要考慮移動特定的問題。

回答

0

您嵌套了處理滾動事件的四個元素。

爲什麼你把一個ScrollView arround一個ListView?

如果您刪除ScrollViews Mousewheel工作正常。

Rectangle { 
    width: 200 
    height: 600 
    ListView { 
     anchors.fill: parent 
     id: list 
     boundsBehavior: Flickable.StopAtBounds 
     clip: true 
     focus: true 
     interactive: true 
     model: 5 

     delegate: Component { 
      MouseArea { 
       id: hoverArea 
       width: 100 
       height: 200 
       onClicked: list.currentIndex = index; 

       Rectangle { 
        id: fauxParent 
        anchors.fill: parent 
        border.width: 1 
        border.color: "black" 

        Rectangle { 
         anchors.top: parent.top 
         anchors.left: parent.left 
         height: parent.height 
         width: parent.width/2 
         border.width: 1 
         border.color: "purple" 
         color: "green" 
         Text { 
          anchors.centerIn: parent 
          text: "stuff" 
         } 
        } 
        ListView { 
         anchors.top: fauxParent.top 
         anchors.right: fauxParent.right 
         height: fauxParent.height 
         width: fauxParent.width/2 
         model: 3 

         delegate: Component { 
          Rectangle { 
           radius: 10 
           height: 100 
           width: 100 
           color: "blue" 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

如果你錯過了滾動條看看這個: How to create scrollbar in QtQuick 2.0?