[英]How to dynamically add Item to QComboBox with QSqlQueryModel
[英]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處理可能只是一個簡單的問題。 如果兩者都適合您,那么由您決定如何處理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.