QTableView格式编号
问题描述:
我已经创建了一个委托,我可以对齐和粗体表中的数字。我想强制他们有两位小数,例如1.2应该显示为1.20。 这是delagete头:QTableView格式编号
#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);
}
还是有点失去了如何使它迫使两位小数取向控制。另外我想知道如何更改背景颜色。 感谢您的帮助。 这里是模型:
body = new QSqlTableModel(parent,data->m_db);
body->setTable("C"+QString::number(markTime.toSecsSinceEpoch()));
body->select();
ui->bodyView->setModel(body);
ui->bodyView->sortByColumn(0,Qt::AscendingOrder);
ui->bodyView->setColumnWidth(0,30);
ui->bodyView->setColumnWidth(1,80);
for(int x=2;x<ui->columns->maximum()+2;x++) ui->bodyView->setColumnWidth(x,40);
ui->bodyView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->bodyView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->bodyView->setAlternatingRowColors(true);
// // *************** Testing ********************
ui->bodyView->setItemDelegateForRow(10,new TotalDelegate);
// // *****************Testing ********************
ui->bodyView->show();
答
一个可能的解决方案是创建一个自定义的类与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);
}
输出:
你的模型是什么? – eyllanesc
我刚更新了模型的帖子 – Dan3460
你想要所有数字都有小数,还是只有那些已经有小数? – eyllanesc