我的理解是当前的显示文本与qcombobox项目列表内容有关。如果一个项目的长度非常长且比qcombobox的宽度宽,那么只显示qcombobox上的部分文本?
从上图中可以看出,QT已经显示部分文字(完整项目以' ker'结尾,显示项目以' sdl'结尾)但是我可以控制确切的显示文字?因为我的组合框有一个背景图像,箭头将比上图中的箭头更多。另一个问题是我是否可以在下拉窗口中控制项目文本显示? QT用' ...'取代了一些单词。但我喜欢自己控制它。
答案 0 :(得分: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,你给它你的文本,然后它返回被删除的文本。
答案 1 :(得分:0)
您可以将任意子字符串存储为项目文本,将整个字符串存储在userData中:
:
for text in itemlist:
combobox.addItem(text[0:n], text)
并通过以下方式获取displaytext,userData:
combobox.currentText()
combobox.currentData(QtCore.Qt.UserRole)
或
combobox.itemText(index)
combobox.itemData(index, QtCore.Qt.UserRole)