Я хочу отобразить 10-8 в элементе QComboBox. Но он отображает теги «sup».
Как отобразить верхний индекс в элементе QComboBox?
Ответы (3)
проще всего использовать специальные символы Юникода и использовать их в файле перевода (прямое использование в коде может быть проблематичным):
10⁻⁸
Если вам не нравится использовать файл перевода, попробуйте этот код:
ui->comboBox->addItem(QString::fromWCharArray(L"10\x207B\x2078"));
ui->comboBox->addItem(QString::fromWCharArray(L"10⁻⁸"));
На моем Qt.5.2.1 (Linux) работает. Также работает вставка строки выше в дизайнере.
tr
для таких случаев даже рекомендуется Документация Qt.
- person Marek R; 20.03.2014
Не существует простого способа добиться этого. Лучший способ — переопределить стиль QComboBox с помощью класса QProxyStyle. Затем вы можете нарисовать текст поля со списком, используя QTextDocument или аналогичный.
http://qt-project.org/doc/qt-5.0/qtwidgets/qproxystyle.html
В частности, QComboBox использует
void QComboBox::paintEvent(QPaintEvent *)
{
QStylePainter painter(this);
....
// draw the icon and text
painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
}
и оттуда вы можете найти, как это делается из qtbase/src/widgets/styles/qcommonstyle.cpp. Переопределения для рисования пользовательского текста вместо основного текста должны быть очевидны, по крайней мере, для QComboBox только для чтения.
Если вам нужно отредактировать что-то в строке редактирования QComboBox, вам нужно будет переопределить этот QLineEdit своим собственным.
QComboBox::itemDelegate() переопределяет только отрисовку всплывающего списка, как указано в документации. Он не переопределяет отображение текста поля редактирования и, следовательно, не может использоваться для полного решения вашей проблемы.
Вы не можете сделать это легко, например. с html, потому что QComboBox
, похоже, не поддерживает форматированный текст, как некоторые другие подклассы QWidget
.
Однако вы можете заменить делегата по умолчанию на рисование по своему усмотрению, включая это. Вам нужно будет установить делегат вашего элемента для QComboBox
и использовать QTextDocument
в вашем методе рисования.
Вот соответствующий отчет об ошибке, который был отправлен некоторое время назад:
Расширенный текст в элементах поля со списком
В качестве альтернативы вы можете дважды проверить кодировку. Это может быть просто проблема с обработкой юникода. Если оба работают на вас, то вам решать, как с этим справиться.
Основываясь на потоке следующего потока, вы можете попробовать это метод QString.
<sup>-8</sup>
? Не уверен, что он поддерживает html, но, основываясь на том, что делает QLabel, я надеюсь на это. - person lpapp   schedule 16.03.2014