我目前在QStandardItem
内有文字“mm3”,现在假设是毫米立方。我有什么方法可以在视图中制作mm ^ 3(即上标3)?
答案 0 :(得分:1)
您应该使用sup
HTML标记来创建超级脚本。因此,在支持富文本的小部件中mm<sup>3</sup>
会产生超级脚本。
在这里,您应该有一个自定义委托来显示特定列的富文本。只需创建自定义QStyledItemDelegate
即可。它可能像:
class RichTextDelegate: public QStyledItemDelegate
{
public:
RichTextDelegate(QObject *parent = 0);
void paint( QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index ) const;
};
RichTextDelegate::RichTextDelegate(QObject *parent):QStyledItemDelegate(parent)
{
}
void RichTextDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if( option.state & QStyle::State_Selected )
painter->fillRect( option.rect, option.palette.highlight() );
painter->save();
QTextDocument document;
document.setTextWidth(option.rect.width());
QVariant value = index.data(Qt::DisplayRole);
if (value.isValid() && !value.isNull())
{
document.setHtml(value.toString());
painter->translate(option.rect.topLeft());
document.drawContents(painter);
}
painter->restore();
}
您应该为特定列设置项目委托:
ui->tableView->setItemDelegateForColumn(colIndex, new RichTextDelegate(ui->tableView));
现在,如果您将行中特定列的模型文本设置为mm<sup>3</sup>
,则会正确显示:
model->item(rowIndex, colIndex)->setText(mm<sup>3</sup>);
答案 1 :(得分:0)
对于显示上标'3'的特定情况,另一个选项是使用相应的Unicode符号 - Qt的文本呈现应该在主字体或后备字体中找到合适的字形。然而,这比上面的答案要少得多 - 它只适用于各种常用的上标。