QSqlQueryModel, Tableview und Farbe

Alles rund um die Programmierung mit Qt
Antworten
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

QSqlQueryModel, Tableview und Farbe

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

neon
Beiträge: 3
Registriert: 27. November 2009 09:08

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Sicher, man könnte sich die data-Methode etwas anpassen.
neon
Beiträge: 3
Registriert: 27. November 2009 09:08

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Abgeleitete klasse die eine Membervariable x hat, wobei dann x im Ctor gesetzt wird?
neon
Beiträge: 3
Registriert: 27. November 2009 09:08

Beitrag 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;
};
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

Beitrag 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
Antworten