QTableView格式化数字

时间:2017-07-29 00:53:17

标签: c++ qt qtableview qsqltablemodel

我创建了一个委托,我可以对齐表格上的数字并加粗体。我想强制它们有两个小数位,例如1.2应显示为1.20。 这是delagete的标题:

.jumbotron h1 {
    color: #513271;
}  

以下是实施:

#ifndef TOTALDELEGATE_H
#define TOTALDELEGATE_H

#include <QObject>
#include <QStyledItemDelegate>


class TotalDelegate : public QStyledItemDelegate
{
public:
  TotalDelegate();

  virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;
};

#endif // TOTALDELEGATE_H

如何控制对齐仍然有点迷失,所以强制两位小数。另外我想知道如何改变背景颜色。 谢谢您的帮助。 这是模型:

#include "totaldelegate.h"

TotalDelegate::TotalDelegate()
{

}

void TotalDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  if(!index.isValid()) return;
  QFont font=option.font;
  font.setBold(true);

  QStyleOptionViewItem localOption(option);
  localOption.font=font;
  localOption.displayAlignment=Qt::AlignRight;
  QStyledItemDelegate::paint(painter,localOption,index);

}

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是创建自定义QSqlTableModel类并覆盖QVariant QSqlTableModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const方法。

在设置显示方式的情况下,我们使用Qt::DisplayRole角色作为过滤器,如果更改背景颜色,我们将使用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);
}

输出:

enter image description here