如何在QComboBox项目中显示上标



我想在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方法。

相关内容

  • 没有找到相关文章

最新更新