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

mur*_*son 5 format precision qt qtableview

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

  • double12.00将显示为12
  • double12.10将显示为12.1
  • double12.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);
}
Run Code Online (Sandbox Code Playgroud)

有更容易的方法吗?任何帮助表示赞赏。

小智 4

QString使用QAbstractItemModel::data返回aQString::number

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();
}
Run Code Online (Sandbox Code Playgroud)