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

如何设置在QTableView中显示数值的精度和对齐方式,qt,format,precision,qtableview,Qt,Format,Precision,Qtableview,设置固定格式以在QTableView中显示数值的最简单方法是什么?我需要格式化为货币-所以始终显示小数部分分隔符和后面的2位数字。可能对齐右侧,可能附加货币名称。现在它显示了所需的内容,例如: 双12.00将显示为12 双12.10将显示为12.1 双12.11将显示为12.11 有简单的方法吗?SetFormatForColumn或类似的东西?在文件中找不到关于那个主题的真正有用的东西。。。 目前,我已经对QStyledItemDelegate进行了子类化。这是可行的,但似乎是一个巨大的开

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

  • 12.00
    将显示为
    12
  • 12.10
    将显示为
    12.1
  • 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);
}

有没有更简单的方法?感谢您的帮助。

使用
QString::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();
}

我不确定这是否更容易。而是在寻找“开箱即用”的东西。在这两种解决方案中(你的和我的),我都需要对某个对象(模型或委托)进行子类化,因此它们似乎都有相同的困难…这种方法需要一个可用于排序的用户角色,数字的排序不同于字符串。最简单的方法是:遵循Joseph的建议。正确方法:子类QStyleItemDelegate。示例如下: