Seite 1 von 1

QSqlQueryModel, Tableview und Farbe

Verfasst: 4. Januar 2010 01:37
von strige
Moin;)

Bin noch nicht der große Held was c++ angeht. Ich habe in meinem Programm ein TableView Widget das mit SqlQueryModel funktioniert.

Jetzt habe ich in meinem Programm eine SQLTabelle in der Float Werte gespeichert sind, Negative sowie Positive. Ist es möglich die negativen Zeilen rot zufärben und positiven Grün? Oder wie gehe ich am geschicktesten vor? Müsste ich evtl. ein eigenes Model erstellen? Wenn ja gibt es evtl deutsche tutorials dafür? Bei den Beispielen vom QAssistanten bin ich nicht durchgestiegen :(

Würde mich rießig über eine Antwort freuen

vlg

Verfasst: 4. Januar 2010 12:40
von upsala

Verfasst: 5. Januar 2010 10:38
von neon
Hallo,

ich habe momentan genau das selbe Problem. Ich möchte speziell eine oder mehrere Cells grün oder rot einfärben.

Habe mir das Beispiel von upsala angeschaut, nur hilft mir das insofern nicht weiter weil da eine gesammte Spalte eingefärbt wird.
Ich möchte aber der fkt übergeben welche Cell eingefärbt werden soll.

Gibts da ne möglichkeit?

MFG Neon

Verfasst: 5. Januar 2010 12:09
von upsala
Sicher, man könnte sich die data-Methode etwas anpassen.

Verfasst: 5. Januar 2010 13:28
von neon
hättest du vielleicht ne Idee wie?

ich hätte der fkt einen dritten Parameter übergeben mit dem ich bestimme welche Cell eingefärbt werden soll.
Hier mal mein Versuch. Mit dem neuen x-Wert möchte ich die Zeile angeben die eingefärbt werden soll.

Code: Alles auswählen

 QVariant CustomSqlModel::data(const QModelIndex &index, int role, int x) const
 {
     QVariant value = QSqlQueryModel::data(index, role);
     if (value.isValid() && role == Qt::DisplayRole) {
         if (index.column() == 0)
             return value.toString().prepend("#");
         else if (index.column() == 2)
             return value.toString().toUpper();
     }
     if (role == Qt::TextColorRole && index.row() == x)
         return qVariantFromValue(QColor(Qt::blue));
     return value;
 }
Allerding wird dann gar nichts mehr eingefärbt.

MFG

Verfasst: 5. Januar 2010 14:25
von AuE
Abgeleitete klasse die eine Membervariable x hat, wobei dann x im Ctor gesetzt wird?

Verfasst: 5. Januar 2010 17:28
von neon
Danke AuE für den Denkanstoß :D habs jetzt so gemacht

Falls noch jemand anders was damit anfangen, kann hier der code.
Der 2. Wert im Ctor gibt die Zeile an, die eingefärbt werden soll.

customsqlmodel.cpp

Code: Alles auswählen

 #include <QtGui>

 #include "customsqlmodel.h"

 CustomSqlModel::CustomSqlModel(QObject *parent, int Row)
     : QSqlQueryModel(parent)
 {
     rowPrint = Row;
 }

 QVariant CustomSqlModel::data(const QModelIndex &index, int role) const
 {
     QVariant value = QSqlQueryModel::data(index, role);
     if (value.isValid() && role == Qt::DisplayRole) {
         if (index.column() == 0)
             return value.toString().prepend("#");
         else if (index.column() == 2)
             return value.toString().toUpper();
     }
     if (role == Qt::TextColorRole && index.row() == rowPrint)
         return qVariantFromValue(QColor(Qt::blue));
     return value;
 }
customsqlmodel.h

Code: Alles auswählen

#include <QSqlQueryModel>

class CustomSqlModel : public QSqlQueryModel
{
    Q_OBJECT

public:
    CustomSqlModel(QObject *parent = 0, int Row = 0);

    QVariant data(const QModelIndex &item, int role) const;

private:
    int rowPrint;
};

Verfasst: 6. Januar 2010 02:34
von strige
Hi zusammen,

Respekt an euch! Also
@upsala
Danke für den Link, leider bin ich hier noch nicht ganz durchgestiegen, aber hat noch mehr interessante Informationen für mich gehabt, die weitere Fragen beantworteten;)

@neon
Danke für das Beispiel, hat ein bisschen was gebracht;) Wie gesagt ich muss mich da bisschen einarbeiten, bin da nicht so fit wie Ihr. möcht mich erstmal bedanken und melde mich nochmal, wenn es kleine Fortschritte gab oder ich garnemmer weiterkomme ;)

vlg