Seite 1 von 1

QSqlQueryModel Zeilen makieren

Verfasst: 14. Mai 2008 10:25
von refresh77
Hallo,
ich habe mir meine Klasse von QSqlQueryModel abgeleitet, um ein bischen Übersicht in eine unübersichtliche Tabelle zu bringen.

Code: Alles auswählen

class SqlColorQueryModel : public QSqlQueryModel {
	Q_OBJECT
public:
  SqlColorQueryModel(QObject *parent=0) : QSqlQueryModel(parent) {  QAbstractItemView::SelectRows;};
  ~SqlColorQueryModel() {};


  QVariant data (const QModelIndex &item, int role=Qt::DisplayRole) const
  {
	if (role==Qt::TextAlignmentRole) {
		return Qt::AlignRight;
	}
    if (item.isValid() &&
        item.column()==15 &&
        role==Qt::ForegroundRole &&
		item.data().toInt()<0) {
      return QColor(Qt::red);     
    }
    return QSqlQueryModel::data(item, role);
  }
};
jetzt wollte ich bestimmte Zeilen Farblich makieren.

Code: Alles auswählen

	  if(item.isValid() &&
		  item.column()==5 && 
		 item.data().toString()=="----" &&
		 role == Qt::BackgroundRole){
			 return QColor(Qt::red);
	  }
So war mein ansatz um erstmal die Zelle farblich zu hinterlegen, wirft aber gleich einen critical Error.
Kann mir jemand verraten warum? Und wie ichs besser mache?
:)

Verfasst: 14. Mai 2008 18:12
von upsala
Auf den ersten Blick ist kein Fehler erkennbar. An welcher Stelle genau bricht der Debugger ab?

Verfasst: 14. Mai 2008 19:31
von Sephral
Eventuell wäre auch ein QItemDelegate für Dich interessant.

Verfasst: 16. Mai 2008 11:16
von refresh77
richtig!
sieht nicht falsch aus!!

Code: Alles auswählen

role == Qt::BackgroundRole
Das ist anscheinent eine Entlosschleife...
Ich habe die beiden Leerzeichen entfernt und jetzt läuft das ^^.
Muss ich nur noch auf die Zeile ausweiten.

Verfasst: 16. Mai 2008 12:17
von upsala
Sorry, aber dieser Fehler ergibt keinen Sinn.

Verfasst: 16. Mai 2008 12:19
von refresh77
Hat denn jemand ne Idee, wie ich die Farbe der Zeile ändere wenn in einer Spalte ein bestimmter wert steht?
Ich hab mir mal die Examples angeguckt.

Code: Alles auswählen

     table->item(9,0)->setBackgroundColor(Qt::lightGray);
Hinterher die Farbe zu änderen wäre wohl eine Möglichkeit.
Nur wird hier QTableWidget benutzt und ich benutze QTableView und meine Ableitung von QSqlQueryModel.

Ich dachte eigentlich auch, dass man so Sachen wie die Textfarbe im View ändert, weil im Model nur die Daten sind.

Verfasst: 16. Mai 2008 12:21
von refresh77
Sorry, aber dieser Fehler ergibt keinen Sinn.
obs Sinn macht oder nicht,

Code: Alles auswählen

	if(item.isValid() &&
		item.column()==5 && 
		role==Qt::BackgroundRole && 
		item.data().toString()=="----")
	{
		return QColor(Qt::white);
	}
So wird kein critical error mehr geworfen.