2015-04-20 91 views
0

美好的一天! 我試圖在不同的選項卡上使用Canvas顯示多個圖表。圖表的比例尺會比顯示屏的實際尺寸略大,所以我想使用ScrollView。有這樣的代碼在幾個文件中:ScrollView和QML中的畫布

main.qml

TabView { 
    id: tabView 
    Layout.alignment: Qt.AlignCenter 
    Layout.fillWidth: true 
    Layout.fillHeight: true 

    Tab1 { 
     id: tab1 
    } 

    //... 
} 

Tab1.qml

Tab { 
    active: true 

    function init() 
    { 
     item.plot.requestPaint() 
    } 

    ScrollView { 
     property var plot: _plot 
     Plot { 
      width: 3000 
      id: _plot 
     } 
    } 
} 

Plot.qml

Canvas { 
    function draw() 
    { 
     console.log("draw go") 
     var ctx = getContext("2d") 
     ctx.reset() 

     //... 
    } 

    onPaint: { 
     draw() 
    } 
} 

在某些時候,函數init()被調用。

問題是,當使用ScrollView信號時Paint未被調用。沒有ScrollView一切正常。控制檯中的錯誤不會出現。

的Qt 5.4.1

回答

0

你需要給你的Canvas高度:

import QtQuick 2.4 
import QtQuick.Window 2.0 
import QtQuick.Controls 1.2 

Window { 
    id: window 
    visible: true 
    width: 300 
    height: 300 

    ScrollView { 
     anchors.fill: parent 

     Canvas { 
      width: 3000 
      height: window.height 
      onPaint: { 
       console.log("draw go") 
      } 
     } 
    } 
} 

這是一個有點混亂給我,因爲documentation says

只有一個項目可以是ScrollView的直接子項,並且子項被隱式錨定以填充滾動視圖。

但隨後接着說:

寬度和子項的高度將被用來定義內容區域的大小。

這似乎是矛盾的說法。