La soluzione migliore è definire un modello personalizzato (sottoclasse QAbstractTableModel
). Probabilmente vorrai avere un QSqlQueryModel
come membro in questa classe personalizzata.
Se si tratta di un modello di sola lettura, è necessario implementare almeno questi metodi:
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
e per i modelli ben educati anche
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
Se è necessario il modello per essere in grado di modifica/invia dati, le cose diventano un po 'più coinvolte e dovrai anche implementare questi metodi:
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole);
bool insertRows(int position, int rows, const QModelIndex &index=QModelIndex());
bool removeRows(int position, int rows, const QModelIndex &index=QModelIndex());
Cosa cambierà realmente un aspetto fila risiede nel valore di ritorno di questo metodo:
QVariant data(const QModelIndex &index, int role) const;
Un esempio muto:
QVariant MyCustomModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
int row = index.row();
int col = index.column();
switch (role)
{
case Qt::BackgroundRole:
{
if(somecondition){
// background for this row,col is blue
return QVariant(QBrush (QColor(Qt::blue)));
}
// otherwise background is white
return QVariant(QBrush (QColor(Qt::white)));
}
case Qt::DisplayRole:
{
// return actual content for row,col here, ie. text, numbers
}
case Qt::TextAlignmentRole:
{
if (1==col)
return QVariant (Qt::AlignVCenter | Qt::AlignLeft);
if (2==col)
return QVariant (Qt::AlignVCenter | Qt::AlignTrailing);
return QVariant (Qt::AlignVCenter | Qt::AlignHCenter);
}
}
}
+1 per il riferimento alla soluzione con un delegato. L'ho dimenticato. – dschulz
ho bisogno di impostare un colore per ogni valore di una tabella colmun (nome SELECT, stato DA utenti) in questo caso "stato" Puoi modificare questo codice. – Tineo
optionV4-> backgroundBrush = QBrush (calculateColorForRow (index.row())); genera errore – Tineo