【问题标题】:How to display superscript in QComboBox item?如何在 QComboBox 项目中显示上标?
【发布时间】:2014-03-16 10:29:01
【问题描述】:

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

【问题讨论】:

  • 你试过<sup>-8</sup>吗?不确定它是否支持 html,但基于 QLabel 支持,我希望如此。
  • 是的,它适用于 qlabel,但不适用于 qcombobox

标签: c++ qt qwidget qtgui qcombobox


【解决方案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) 上它可以工作。 在设计器中粘贴上面的字符串也可以。

【讨论】:

  • 是的,它不是可本地化的字符串,但没有什么禁止使用包含纯 Unicode 字符串的附加翻译文件(我更喜欢这种解决方案,而不是在源代码文件的编码方面存在一些问题)。
  • 据我了解,OP 的问题是这不起作用,即使编辑器正确设置了编码也是如此。
  • 是的,但他尝试使用 html 标签,我建议使用上标中没有任何标签的 Unicode 字符。如果您不喜欢翻译文件,还有其他方法可以实现这些字符(例如粘贴在设计器中)。
  • 不,OP首先尝试了unicode字母,然后是标签。很简单。自己试试。 :-) 您可以将编辑器设置为 unicode 编码(或者使用具有正确编码集的 QTextStream 读取它,但它非常 hacky)或者您需要富文本。
  • 显然你没听懂我的回答。
【解决方案2】:

没有简单的方法可以做到这一点。最好的方法是使用 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() 仅覆盖弹出列表的绘制,如文档中所述。它不会覆盖编辑框文本的显示,因此它不能用于完全解决您的问题。

【讨论】:

    【解决方案3】:

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

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

    这是前一阵子提交的相应错误报告:

    Rich-text in combo box items

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

    基于following thread 线程,你可以试试这个QString method

    【讨论】:

    • @user3330612:什么是不允许的?
    • @Alen:啊,是的,输入的最小字符数有一些限制。这将比您预期的要多一些工作,因为没有对它的临时支持,但至少它会起作用。
    • @Alen 在 SO 表示感谢的正常方式是投票... :-) 作为提问者,您还可以选择接受一个答案以表明它解决了您的问题(但这很好建议等待几天,以防得到更好的答案)。
    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2020-03-02
    • 2014-06-16
    相关资源
    最近更新 更多