QStandardItem中的超级脚本文本

时间:2016-03-03 02:06:13

标签: c++ qt model-view-controller superscript

我目前在QStandardItem内有文字“mm3”,现在假设是毫米立方。我有什么方法可以在视图中制作mm ^ 3(即上标3)?

2 个答案:

答案 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的文本呈现应该在主字体或后备字体中找到合适的字形。然而,这比上面的答案要少得多 - 它只适用于各种常用的上标。