我想在QComboBox项中显示10-8。但是它显示"sup"标签
最简单的方法是使用特殊的Unicode字符并在翻译文件中使用它们(在代码中直接使用可能会有问题):
10⁻⁸
如果你不喜欢使用翻译文件,试试下面的代码:
ui->comboBox->addItem(QString::fromWCharArray(L"10x207Bx2078"));
ui->comboBox->addItem(QString::fromWCharArray(L"10⁻⁸"));
在我的Qt.5.2.1 (Linux)上它可以工作。
要做到这一点没有简单的方法。最好的方法是使用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()仅覆盖弹出列表的绘制,如文档中所示。它不覆盖编辑框文本的显示,因此它不能完全解决您的问题。
你不能很容易地做到这一点,例如使用html,因为QComboBox
似乎不像其他QWidget
子类那样支持富文本。
但是,您可以根据需要替换默认委托来绘制,包括这个。你需要为QComboBox
设置你的项目委托,并在你的绘画方法中使用QTextDocument
。
下面是刚才提交的bug报告:
组合框项中的富文本
或者,您可以双重检查编码。这可能只是一个关于unicode处理的简单问题。如果两者都适合你,那么如何处理就取决于你了。
基于下面的线程,您可以尝试这个QString方法。