Seite 1 von 1

[gelöst] SQLTableModel read only und eigene Darstellung...

Verfasst: 30. März 2011 09:22
von Ritchie
Hallo Zusammen,

derzeit versuche ich Daten aus einer MYSQL Datenbank in einem Grid darzustellen. Jedoch finde ich keinen Lösungsansatz (Beispiel) mit den höheren SQL Funktionen (Datenbanktreiber unabhängig), welche read only sind.

Edit: Lösung für read Only
view->setEditTriggers(QAbstractItemView::NoEditTriggers);

Auch möchte ich die Anzeige von einzelnen Datenbank-Felder selber gestalten.

Beispiel:
In der Datenbank steht ein Wert "Status" als "Small Int" mit dem Wert 0...4. In der Anzeige vom Grind soll dann aber stehen "gekommen", "gegangen", ....

Mein QT Buch verweisst hier auf die ausführliche Online-Dok., nur finde ich den Einsprung noch nicht wirklich hierfür.

Kann man das SQLTableModel dafür verwenden und entsprechend "umbiegen". Wie sieht das ganze bei grossen Datenmengen aus?


Gruss R.

Re: SQLTableModel read only und eigene Darstellung der ...

Verfasst: 30. März 2011 12:48
von Ritchie
War so nicht gedacht, der folgende Text sollte eigentlich nur unten angefügt werden

Edit: Lösung für read Only ist !
view->setEditTriggers(QAbstractItemView::NoEditTriggers);


Hier die Lösung für die eigene Darstellung von Werten (Beispielhaft)

Einfach von der QSqlTableModel eine eigene Klasse ableiten und
die Funktionen data() selber erstellen.

Include

Code: Alles auswählen

class		ModelUserLog	: public QSqlTableModel
{
	Q_OBJECT

public:
		ModelUserLog ( QObject *parent = 0, QSqlDatabase db = QSqlDatabase());
		QVariant data(const QModelIndex &index, int role) const;

};
C-Code

Code: Alles auswählen

ModelUserLog::ModelUserLog( QObject 	*parent, QSqlDatabase db) : QSqlTableModel(parent,db)
{
}

QVariant		ModelUserLog::data(const QModelIndex &index, int role) const
{
	QVariant value = QSqlTableModel::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.column() == 1)
			return qVariantFromValue(QColor(Qt::blue));

	return value;
}
Habe ich das Falsch gesehen ?

Gruss R.