Su mejor opción es definir un modelo personalizado (subclase QAbstractTableModel
). Probablemente desee tener un QSqlQueryModel
como miembro en esta clase personalizada.
Si se trata de un modelo de sólo lectura, es necesario implementar al menos estos métodos:
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
y para los modelos de buen comportamiento también
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
Si necesita que el modelo sea capaz de editar/enviar datos, las cosas se complican un poco más y también necesitará implementar estos métodos:
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());
Lo que en realidad va a cambiar un aspecto fila radica en el valor de retorno de este método:
QVariant data(const QModelIndex &index, int role) const;
Un ejemplo tonto:
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 para la referencia de la solución con un delegado. Me habia olvidado de eso. – dschulz
necesito establecer un color para cada valor de una tabla colmun (SELECCIONAR nombre, estado FROM usuarios) en este caso "estado" ¿Se puede editar este código? – Tineo
optionV4-> backgroundBrush = QBrush (calculateColorForRow (index.row())); genera error – Tineo