如何设置精度和对齐以在 QTableView 中显示数值

Posted

技术标签:

【中文标题】如何设置精度和对齐以在 QTableView 中显示数值【英文标题】:how to set precision and alignment for displaying numeric values in QTableView 【发布时间】:2015-03-29 18:10:14 【问题描述】:

设置固定格式以在 QTableView 中显示数值的最简单方法是什么?我需要格式化为货币 - 所以总是显示小数部分分隔符和后面的 2 位数字。可能右对齐,可能附加货币名称。现在它根据需要显示,例如:

double 12.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::numberQAbstractItemModel::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 中显示数值的主要内容,如果未能解决你的问题,请参考以下文章

如何对齐 QTableView 的列

如何在pyqt4的右侧对齐qtableview行?

QTableView中单元格内容居中对齐

PyQt4 qTableView 对齐

PyQt - 实现一个 QAbstractTableModel 以在 QTableView 中显示

PyQt:更改 QTableView 中复选框的对齐方式