2017-12-22 3 views
1

Ich möchte eine Zelle in einem QTableView färben.Hintergrundfarbe für eine Zelle in einem QTableModel ändern

Also ich versuche, die itemData des entsprechenden Artikels in der zugehörigen QTableModel zu ändern.

Um dies zu tun, verwende ich die setItemData Methode der QAbstractTableModel Klasse.

In der Dokumentation:

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

Das ist mein Stück Code:

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

Ich dachte, das die dritte Zelle des Modells Farbe würde (horizontal und vertikal) in rot.

Aber die Anwendung Antworten:

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

Wenn ich versuche, den Qcolor Typen in einer Qvariant zu verwandeln:

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

Antwort:

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

was ich wirklich kann nicht verstehen.

Also gibt es meine Frage: Welche Art von Daten muss ich in den zweiten Parameter einer setItemData Methode eingeben?

Dank für das Voraus

+0

SetItemData nicht akzeptiere Farbe als zweiten Index – user1767754

+0

Ja, ich hatte die Dokumentation falsch verstanden. Ich dachte, eine Farbe würde erwartet, aber es war eine Qmap. Mit setData ist das Problem gelöst. Vielen Dank. –

Antwort

1

sollten Sie QAbstractItemModel::setData verwenden, um einen einzelnen Wert in der itemData Karte zu setzen.

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

Sie können QAbstractItemModel::setItemData verwenden, wenn Sie auf einmal viele Werte einstellen möchten, aber eine QMap zu bauen, wo jedes Paar von einer Rolle und seinem entsprechenden Wert zusammensetzt:

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

Vielen Dank p-a-o-l-o! Dank dir habe ich endlich verstanden, wie setItemData funktioniert. Ich habe setData verwendet, und die Fehlermeldung ist weg. Die (3,3) Zelle hat die Farbe nicht geändert, aber es ist ein anderes Problem! ;-) Dieser ist gelöst. –

Verwandte Themen