我想在QComboBox项目中显示10 -8 。但它显示" sup"标签
答案 0 :(得分:1)
最简单的方法是使用special Unicode characters并在翻译文件中使用它们(在代码中直接使用可能会有问题):
10⁻⁸
如果您不想使用翻译文件,请尝试以下代码:
ui->comboBox->addItem(QString::fromWCharArray(L"10\x207B\x2078"));
ui->comboBox->addItem(QString::fromWCharArray(L"10⁻⁸"));
在我的Qt.5.2.1(Linux)上它可以工作。 在设计师中粘贴上面的字符串也可以。
答案 1 :(得分:1)
没有简单的方法可以实现这一点。最好的方法是使用QProxyStyle类覆盖QComboBox的样式。然后,您可以使用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()仅覆盖弹出列表的绘制,如文档中所示。它不会覆盖编辑框文本的显示,因此不能用于完全解决您的问题。
答案 2 :(得分:0)
你不能轻易做到这一点,例如使用html,因为QComboBox
似乎不像其他QWidget
子类一样支持富文本。
但是,你可以根据需要替换默认的委托,包括这个。您需要为QComboBox
设置项目委托,并在绘制方法中使用QTextDocument
。
这是前一段时间提交的相应错误报告:
或者,您可以检查编码。关于unicode处理可能只是一个简单的问题。如果两者都适合您,那么由您决定如何处理它。
根据following thread主题,您可以尝试此QString method。