2015-11-02 763 views
1

我的理解是当前显示的文本与qcombobox项目列表内容有关。如果一个项目的长度比qcombobox的宽度更长,宽度更大,只显示部分文本在qcombobox上?如何在qcombobox(QT)中显示文本的一部分

enter image description here

从上面的图片看出,QT已经显示文本的一部分(全项与“ker的”结束时,显示项目与“SDL”结尾),但我可以控制精确显示文本?因为我的组合框有一个背景图像,箭头将比上图中的更多。

另一个问题是我可以控制下拉窗口中的项目文本显示吗? QT用'...'替换了一些单词,但我喜欢自己控制它。

回答

1

试试这个

m_combobox->addItem("a very long long long long long long text "); 
    QFont font("times", 24); 
    QFontMetrics fm(font); 
    QString elidedText= fm.elidedText("a very long long long long long long text ",Qt::ElideRight, 80); 
m_combobox->addItem(elidedText); 

你可以做一个函数,它为QString作为参数,返回你给它你的文字为QString,并返回消隐文本。

0

尝试设置组合框的宽度。 Combobox不会超出指定的宽度。

+0

你是说下拉框宽度或combox本身的宽度? – jon

+0

组合框宽度。 – user2906526

+0

@ user2906526想说你把'm_combobox-> setFixedWidth(someInt);'它应该可以工作,但你会得到一个elide中间我认为(...在文本的中间)。 – Mido

0

你可以存储任意字符串作为项目的文本和用户数据的整个字符串:

在PyQt的

for text in itemlist: 
     combobox.addItem(text[0:n], text) 

,并获得displaytext,用户数据是:

combobox.currentText() 
combobox.currentData(QtCore.Qt.UserRole) 

或通过

combobox.itemText(index) 
combobox.itemData(index, QtCore.Qt.UserRole) 
相关问题