Legen Sie Farbe, um ein QTableView Zeile
void MyWindow::initializeModelBySQL(QSqlQueryModel *model,QTableView *table,QString sql){
model = new QSqlQueryModel(this);
model->setQuery(sql);
}
Mit dieser Methode kann ich eine QSQlQueryModels zu meinem QTableviews.
Aber Wie kann ich die Farbe einer Zeile basierend auf der Wert in einer Zelle?
InformationsquelleAutor Tineo | 2012-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der view zeichnet den hintergrund der
Qt::BackgroundRole
Rolle der Zelle, die dieQBrush
Wert zurückgegebenQAbstractItemModel::data(index, role)
für diese Rolle.Können Sie eine Unterklasse der
QSqlQueryModel
neu zu definierendata()
zur Rückgabe der berechneten Farbe, oder wenn Sie Qt > 4.8 verwenden, können Sie einQIdentityProxyModel
:Und verwenden Sie dieses Modell in der Ansicht, mit der sql-Modell-set als Quelle mit
QIdentityProxyModel::setSourceModel
.ODER
Kann man das Modell unverändert und ändern Sie den hintergrund mit einem Delegierten legen Sie die Ansicht mit
QAbstractItemView::setItemDelegate
:Als die Letzte Methode ist nicht immer offensichtlich, übersetzen von C++ - code, hier ist das äquivalent in python:
ich brauche eine Farbe für jeden Wert der Tabelle colmun (SELECT name, status FROM user) in diesem Fall "status" Können Sie diesen code Bearbeiten.
optionV4->backgroundBrush = QBrush(calculateColorForRow(index.Zeile())); es erzeugt Fehler
Ich vergaß die calculateColor... die Funktion musste
const
. Um den status von Modell, die Sie verwenden könnenindex->sibling(index->row(), 1 /* the column # for status */)
, so müssen Sie möglicherweise passconst QModelIndex & index
stattint row
auf die Funktion.Nach jeder Veränderung einer Zelle, die Farben, die Zellen werden nicht aktualisiert / automatisch neu gezeichnet. Ein update kann erzwungen werden, indem Berufung
update (index)
auf die QTableView, oder durch die Emission oder der AufrufdataChanged (index, index)
aus einer Unterklasse von QTableView. (Dank )InformationsquelleAutor alexisdm
Ihre beste Wette ist, um eine benutzerdefinierte Modell (
QAbstractTableModel
Unterklasse). Sie wahrscheinlich wollen, um eineQSqlQueryModel
als Mitglied in diese benutzerdefinierte Klasse.Wenn es ein nur-lese-Modell, die Sie implementieren müssen mindestens die folgenden Methoden:
und für gut benommen Modelle auch
Wenn Sie das Modell in der Lage sein, zu Bearbeiten/senden von Daten, die Dinge ein bisschen mehr zu engagieren und auch Sie brauchen, um diese Methoden implementieren:
Was wird sich tatsächlich ändern, eine Zeile Aussehen liegt in der return-Wert dieser Methode:
Einen stummen Beispiel:
InformationsquelleAutor dschulz