It is best to define a custom model (subclass of QAbstractTableModel
). You probably want to have QSqlQueryModel
as a member of this custom class.
If this is a read-only model, you need to implement at least these methods:
int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const;
and for well-made models also
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
If you need a model for editing / sending data, everything becomes a little more complicated, and you also need to implement these methods:
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());
What really changes the appearance of the string in the return value of this method:
QVariant data(const QModelIndex &index, int role) const;
Mute example:
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 ); } } }