C++ 如何在QComboBox项中显示上标?

C++ 如何在QComboBox项中显示上标?,c++,qt,qwidget,qtgui,qcombobox,C++,Qt,Qwidget,Qtgui,Qcombobox,我想在QComboBox项目中显示10-8。但它会显示“sup”标记。您不能轻松做到这一点,例如使用html,因为QComboBox似乎不像其他QWidget子类那样支持富文本 但是,您可以根据需要替换默认代理进行绘制,包括以下内容。您需要为QComboBox设置项目委托,并在绘制方法中使用QTextDocument 以下是不久前提交的相应bugreport: 或者,您可以再次检查编码。这可能只是关于unicode处理的一个简单问题。如果两者都对你有用,那就看你如何处理了 根据线程,您可以尝试

我想在QComboBox项目中显示10-8。但它会显示“sup”标记。

您不能轻松做到这一点,例如使用html,因为
QComboBox
似乎不像其他
QWidget
子类那样支持富文本

但是,您可以根据需要替换默认代理进行绘制,包括以下内容。您需要为
QComboBox
设置项目委托,并在绘制方法中使用
QTextDocument

以下是不久前提交的相应bugreport:

或者,您可以再次检查编码。这可能只是关于unicode处理的一个简单问题。如果两者都对你有用,那就看你如何处理了

根据线程,您可以尝试此操作。

最简单的方法是在翻译文件中使用它们(直接在代码中使用可能会有问题):

十,⁻⁸

如果不喜欢使用翻译文件,请尝试以下代码:

ui->comboBox->addItem(QString::fromWCharArray(L"10\x207B\x2078"));
ui->comboBox->addItem(QString::fromWCharArray(L"10⁻⁸"));
在我的Qt.5.2.1(Linux)上,它可以工作。
同样,在designer中粘贴上面的字符串也很有效。

实现这一点没有简单的方法。最好的方法是使用QProxyStyle类重写QComboBox的样式。然后可以使用QTextDocument或类似工具绘制组合框的文本

更具体地说,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()仅覆盖弹出列表的绘制,如文档中所示。它不会覆盖编辑框文本的显示,因此无法完全解决您的问题。

您是否尝试过
-8
?不确定它是否支持html,但基于QLabel的支持,我希望是这样。是的,它与QLabel一起工作,但与qcombobox@user3330612:什么是不允许的?@Alen:啊,是的,输入的最小字符有一些限制。这将比您预期的要多一些,因为没有现成的支持,但至少它会起作用。@Alen在SO说谢谢的通常方式是向上投票…:-)作为提问者,你也可以选择接受一个答案,以表明它解决了你的问题(但最好等几天,以防给出更多好的答案)。是的,它不是可本地化的字符串,但没有任何东西禁止使用包含纯Unicode字符串的附加翻译文件(我更喜欢这个解决方案,因为它在编码源代码文件方面有一些问题)。据我所知,OP的问题是,即使编辑器正确设置了编码,这也不起作用。是的,但他尝试使用html标记,我建议使用上标中的Unicode字符,但不带任何标记。如果你不喜欢翻译文件,还有其他方法可以实现这些字符(例如,粘贴在设计器中)。不,OP首先尝试使用unicode字母,然后是标记。这很简单。请自己尝试一下。:-)您可以将编辑器设置为unicode编码(或者使用具有适当编码集的QTextStream读取它,但它非常粗糙),或者您需要富文本。显然,您不理解我的答案。