如何设置精度和对齐以在 QTableView 中显示数值
Posted
技术标签:
【中文标题】如何设置精度和对齐以在 QTableView 中显示数值【英文标题】:how to set precision and alignment for displaying numeric values in QTableView 【发布时间】:2015-03-29 18:10:14 【问题描述】:设置固定格式以在 QTableView 中显示数值的最简单方法是什么?我需要格式化为货币 - 所以总是显示小数部分分隔符和后面的 2 位数字。可能右对齐,可能附加货币名称。现在它根据需要显示,例如:
double12.00
将显示为12
,
double 12.10
将显示为12.1
,
double 12.11
将显示为12.11
,
有什么简单的方法吗? SetFormatForColumn 或类似的东西?在文档中找不到对那个主题真正有用的东西......
目前我已将QStyledItemDelegate
子类化。这可行,但似乎开销很大,因为我的子类所做的唯一一件事就是重新实现 2 个方法 - 如下所示:
QString CurrencyDelegate::displayText(const QVariant & value, const QLocale & locale) const
return locale.toCurrencyString(value.toDouble());
void CurrencyDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
QStyleOptionViewItem myOption = option;
(myOption.displayAlignment ^= Qt::AlignLeft) |= Qt::AlignRight;
QStyledItemDelegate::paint(painter, myOption, index);
有没有更简单的方法?任何帮助表示赞赏。
【问题讨论】:
最简单的方法:听从约瑟夫的建议。正确方法:子类 QStyleItemDelegate。此处示例:***.com/questions/10064149/… 【参考方案1】:使用QString::number
从QAbstractItemModel::data
返回QString
QVariant YourTableModel::data(const QModelIndex & index, int32_t role) const
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
switch (index.column())
case YOUR_COL:
double theDouble = getDoubleFromModelSomewhere();
return QString::number(theDouble, 'f', 2); // Format shows 2 decimals
return QVariant();
【讨论】:
我不确定这是否更容易。而是在寻找“开箱即用”的东西。在这两种解决方案(你的和我的)中,我都需要对某些东西进行分类(模型或委托),所以它们似乎都有同样的困难...... 这种方法需要一个可用于排序的 UserRole,数字的排序方式与字符串不同。以上是关于如何设置精度和对齐以在 QTableView 中显示数值的主要内容,如果未能解决你的问题,请参考以下文章