簡體   English   中英

如何在QComboBox項中顯示上標?

[英]How to display superscript in QComboBox item?

我想在QComboBox項目中顯示10 -8 但它顯示“sup”標簽。

最簡單的方法是使用特殊的Unicode字符並在翻譯文件中使用它們(在代碼中直接使用可能會有問題):

10⁻⁸

如果您不喜歡使用翻譯文件,請嘗試以下代碼:

ui->comboBox->addItem(QString::fromWCharArray(L"10\x207B\x2078"));
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覆蓋該QLineEdit。

QComboBox :: itemDelegate()僅覆蓋彈出列表的繪制,如文檔中所示。 它不會覆蓋編輯框文本的顯示,因此它不能用於完全解決您的問題。

你不能輕易地做到這一點,例如使用html,因為QComboBox似乎不像其他一些QWidget子類那樣支持富文本。

但是,您可以根據需要替換默認委托以進行繪制,包括此操作。 您需要為QComboBox設置項委托,並在paint方法中使用QTextDocument

這是前一段時間提交的相應bug報告:

組合框項目中的富文本

或者,您可以檢查編碼。 關於unicode處理可能只是一個簡單的問題。 如果兩者都適合您,那么由您決定如何處理它。

基於以下線程線程,您可以嘗試此QString方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM