2017-12-22 33 views
1

セルをQTableViewに色付けしたいと思います。QTableModelのセルの背景色を変更します

これで、対応するの対応するアイテムのitemDataを変更しようとしています。

これを行うには、QAbstractTableModelクラスのsetItemDataメソッドを使用します。ドキュメントで

QAbstractItemModel::setItemData(const QModelIndex & index, const QMap < int, QVariant > & roles)

これは、コードの私の部分である:

color = QtGui.QColor(Qt.red) 
self.model.setItemData(self.model.index(3,3),color,Qt.BackgroundRole) 

Iこれは赤で(水平および垂直)モデルの第3のセルに色だろうと思いました。

しかし、アプリケーションの応答:

color = Qt.QVariant(QtGui.QColor(Qt.red)) 
self.model.setItemData(self.model.index(3,3),color,Qt.BackgroundRole) 

回答:私は本当にすることはできません

TypeError: PyQt4.QtCore.QVariant represents a mapped type and cannot be instantiated 

TypeError: QAbstractItemModel.setItemData(QModelIndex, dict-of-int-QVariant): argument 2 has unexpected type 'QColor' 

私はQvariantQcolorタイプを変換しようとした場合わかる。

私の質問は、setItemDataメソッドの2番目のパラメータに入力するデータの種類は何ですか?事前

+0

setItemDataはしていません:あなたは一度に多くの値を設定しますが、それぞれのカップルが役割とそれに対応する値で構成されてQMapを構築する必要がしたい場合はQAbstractItemModel::setItemDataを使用することができます

self.model.setData(self.model.index(3,3),color,Qt.BackgroundRole) 

色を第2のインデックスとして受け入れる – user1767754

+0

はい、私はドキュメントを誤解していました。私は色が予想されると思ったが、それはQmapだった。 setDataを使用すると、問題は解決されます。ありがとう。 –

答えて

1

ため

ありがとうございますitemDataマップ内の単一の値を設定するためにQAbstractItemModel::setDataを使用する必要があります。

QMap<int, QVariant> map; 
map.insert(Qt::BackgroundRole, color); 
self.model.setItemData(self.model.index(3,3), map); 
+0

ありがとうp-a-o-l-o! おかげで、ついにsetItemDataがどのように動作するのか理解できました。 私はsetDataを使用しましたが、エラーメッセージは表示されません。 (3,3)セルの色は変更されていませんが、別の問題です。 ;-)これは解決されました。 –

関連する問題