ich habe via ODBC Zugriff auf eine MySQL-Datenbank. In der Tabelle gibt es Spalten welche boolche Werte enthalten. Beim Nutzung des QSQlTableModel / TableView werden diese als Zahl dargestellt und lassen sich über eine Spinbox editieren. Ich möchte die Darstellung und das Editieren aber über eine Checkbox.
Nachdem was ich gelesen habe, muß ich dazu QSqlTableModel ableiten und die Funktionen :data und :setdata überschreiben um die in der Datenbank als tinyint abgespeicherten Werte nach bool zu konvertieren. Mit :data funktioniert das, aber ich habe keine Ahnung, wie ich das mit :setdata machen soll?
Wo sollen die Daten hingespeichert werden?
Code: Alles auswählen
MitgliederListModel::MitgliederListModel(QObject *parent , QSqlDatabase db):
QSqlTableModel(parent,db)
{
}
QVariant MitgliederListModel::data(const QModelIndex &index, int role) const
{
/*! Data holt die Daten aus dem Model und sendet sie an den View. Da MySQL über ODBC bool-Daten
als int schickt, gibt es eine falsche Darstellung im View (SpinBox statt Checkbox).*/
if(!index.isValid())
return QVariant();
switch(index.column())
{
case 7:
case 8:
{
//Daten holen
QVariant x = QSqlTableModel::data(index,role);
//Konvertieren
if (x.toInt()==0)
return QVariant(false);
else
return QVariant(true);
}
break;
default:
return QSqlTableModel::data(index, role);
}
}
bool MitgliederListModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
// validate the index and that row and column are inside the given borders...
if(!index.isValid() || (this->columnCount() <= index.row()) || (this->columnCount() <= index.column()))
return false;
switch(index.column())
{
case 7:
case 8:
/* Wie kommen die Daten ins model???????????????*/
return true; /*! so tun wie editiert */
break;
default:
return false; // nichts wurde editiert
/*! Signal fehlt nocht */
}
}
mini