В настоящее время у меня есть текст внутри QStandardItem
это «мм3», теперь это предполагается, что это миллиметровый кубер. Есть ли способ для меня, чтобы сделать его мм ^ 3 (т.е. верхний индекс 3) в представлении?
Вы должны использовать 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>);
Для конкретного случая показа верхнего индекса «3» другой вариант будет использовать соответствующий символ Unicode — при рендеринге текста Qt должен быть найден подходящий глиф либо в вашем основном шрифте, либо в резервном. Однако это гораздо менее универсально, чем ответ выше — он работает только для различных обычно определенных верхних индексов.