我想加载一些自定义数据(不仅仅是标签和大小,还有我需要的其他数据)。比如说,我也想从模型中加载每个切片的颜色。如何访问“第三列”值-“黑色”或“白色”,并使QML使用它? 这是我的代码:
main.py:
import sys
from PyQt5 import QtCore, QtWidgets, QtQuick
import custom_model
if __name__ == '__main__':
app = QtWidgets.QApplication( sys.argv )
view = QtQuick.QQuickView()
outer_ring_model = custom_model.OuterRingModel()
view.rootContext().setContextProperty( 'outerRingModel', outer_ring_model )
view.setSource( QtCore.QUrl( "main.qml" ) )
view.show()
sys.exit( app.exec_() )
自定义_model.py:
from PyQt5 import QtCore
class OuterRingModel( QtCore.QAbstractTableModel ):
def __init__( self, parent=None ):
super().__init__( parent )
self.column_count = 2
self.row_count = 100
self.data = []
i = 0
while i < (self.row_count / 2):
self.data.append(['Black', 50, 'black'])
self.data.append(['White', 50, 'white'])
i += 1
def rowCount( self, parent ):
return len( self.data )
def columnCount( self, parent ):
return self.column_count
def data( self, index, role ):
if role == QtCore.Qt.DisplayRole:
return self.data[ index.row() ][ index.column() ]
elif role == QtCore.Qt.EditRole:
return self.data[ index.row() ][ index.column() ]
elif role == QtCore.Qt.BackgroundRole:
return QtGui.QColor( QtCore.Qt.white )
return QtCore.QVariant()
main.qml:
import QtQuick 2.7
import QtQuick.Window 2.0
import QtQuick.Controls 1.4
import QtCharts 2.1
Grid {
id: grid1
width: 1024
height: 600
spacing: 10
rows: 1
columns: 2
Component.onCompleted: { update() }
ChartView {
id: chart
width: 600
height: 600
antialiasing: true
animationDuration: 1000
animationOptions: ChartView.AllAnimations
title: "MyTitle"
legend.visible: false
PieSeries {
id: serie0
name: "Outer Ring"
size: 0.75
holeSize: 0.7
onSliceAdded: {
slice.color = Qt.lighter("red", 1.5)
// slice.color = HOW_TO_IMPORT_MODEL_DATA_HERE
}
VPieModelMapper {
id: model0
model: outerRingModel
labelsColumn: 0
valuesColumn: 1
firstRow: 0
rowCount: 100
}
}
}
}
您所需要的不能在QML中实现,因为您不知道与切片相关联的索引,所以必须在Python/C++中实现该逻辑。此外,您的模型存在我已经纠正的错误
main.py
自定义_model.py
main.qml
我成功地做到了这一点,没有任何新的实现
我的切片列表如下所示:
这是添加馅饼及其自定义属性的函数。自定义属性是自动添加的,您不必考虑它
然后使用Component.onCompleted或任何其他要使用的事件调用它:
相关问题 更多 >
编程相关推荐