QTableView formatting numbers

陌路散爱 提交于 2019-12-02 03:19:05

One possible solution is to create a custom QSqlTableModel class and override the QVariant QSqlTableModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const method.

In the case of setting how it will be shown we use the Qt::DisplayRole role as a filter, and in case of changing the background color we will use the Qt::BackgroundRole:

*.h

#ifndef CUSTOMSQLTABLEMODEL_H
#define CUSTOMSQLTABLEMODEL_H

#include <QSqlTableModel>

class CustomSqlTableModel : public QSqlTableModel
{
public:
    CustomSqlTableModel(QObject *parent = Q_NULLPTR, QSqlDatabase db = QSqlDatabase());

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
};

#endif // CUSTOMSQLTABLEMODEL_H

*.cpp

#include "customsqltablemodel.h"

#include <QBrush>

CustomSqlTableModel::CustomSqlTableModel(QObject *parent, QSqlDatabase db):QSqlTableModel(parent, db)
{

}

QVariant CustomSqlTableModel::data(const QModelIndex &index, int role) const
{
    if (role == Qt::DisplayRole){
        if(index.column()  == 4)
            return QVariant(QString::number(QSqlTableModel::data(index, role).toDouble(), 'f', 2));
    }

    if (role == Qt::BackgroundRole){
        if(index.row()  == 4)
            return QVariant(QBrush(Qt::blue));
    }
    return QSqlTableModel::data(index, role);
}

Output:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!