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