如何在QComboBox项中显示上标?

时间:2014-03-16 10:29:01

标签: c++ qt qwidget qtgui qcombobox

我想在QComboBox项目中显示10 -8 。但它显示" sup"标签

3 个答案:

答案 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

这是前一段时间提交的相应错误报告:

Rich-text in combo box items

或者,您可以检查编码。关于unicode处理可能只是一个简单的问题。如果两者都适合您,那么由您决定如何处理它。

根据following thread主题,您可以尝试此QString method