Текст суперскрипта внутри QStandardItem

В настоящее время у меня есть текст внутри QStandardItem это «мм3», теперь это предполагается, что это миллиметровый кубер. Есть ли способ для меня, чтобы сделать его мм ^ 3 (т.е. верхний индекс 3) в представлении?

2

Решение

Вы должны использовать 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

Другие решения

Для конкретного случая показа верхнего индекса «3» другой вариант будет использовать соответствующий символ Unicode — при рендеринге текста Qt должен быть найден подходящий глиф либо в вашем основном шрифте, либо в резервном. Однако это гораздо менее универсально, чем ответ выше — он работает только для различных обычно определенных верхних индексов.

0

По вопросам рекламы [email protected]