我是Qt开发的新手,但你不能从课堂上获得 QAbstactTableModel ,并实施 data 方法,以便当角色为时,它返回浮点值加上“MB”(在QString对象中) DisplayRole ?
QAbstactTableModel
data
DisplayRole
看一下 setItemDelegate 或setItemDelegateForColumn。您可以从QStyledItemDelegate派生您的委托类,并且在重写的绘制方法中,您可以绘制包括单位在内的数字。
我知道你的问题是关于QTableView的,但是如果它是你想要显示的唯一的东西(我不知道你的目标)可能会更容易使用QTableWidget与QDoubleSpinBox,因为它有一个方法允许你设置一个后缀为显示的值。
在你的情况下,它将是:
QDoubleSpinBox* spin = new QDoubleSpinBox(); spin->setSuffix("MB");
请注意,范围默认设置为0.0到99.99,因此如果要设置其他值,则应更改之前的范围。
希望这可以帮助。
如果您只想获取模型的值并修改它的字符串表示形式,您可以通过继承QStyledItemDelegate并仅覆盖单个方法(即返回QString的displayText())来轻松完成。我只是这样做,以最合适的单位(字节,千字节,兆字节等)显示值(表示进程消耗的内存量)。所以这是一个与上述问题或多或少类似的用例,它就像一个魅力。您可以看到下面的代码(但忽略应用程序特定的部分)。
头文件:
#pragma once #include <QStyledItemDelegate> class UnitAwareItemDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit UnitAwareItemDelegate(QObject* parent = 0); virtual QString displayText(const QVariant & value, const QLocale & locale) const; };
实施文件:
#include "UnitAwareItemDelegate.hpp" #include "UnitUtils.hpp" #include <QPainter> #include <QStyleOptionViewItem> #include <QModelIndex> UnitAwareItemDelegate::UnitAwareItemDelegate(QObject* parent): QStyledItemDelegate(parent) { } QString UnitAwareItemDelegate::displayText(const QVariant& value, const QLocale& locale) const { if (value == 0) return QString(); // value supplied by libproc is in kb so we mul by 1024 to get the byte value uint64_t oldValue = value.toULongLong() * 1024; const UnitUtils::ValueUnit unit = UnitUtils::findSuitableUnit(oldValue); const uint64_t newValue = oldValue / UnitUtils::value(unit); return QString("%1 %2") .arg(QString::number(newValue)) .arg(QString(UnitUtils::name(unit).at(0)).toUpper()); }