我有一个带有长标签的 QComboBox。
qc = new QComboBox;
qc->addItem(tr("LabelA is a very long label here."));
下拉列表中的文本比我想要的要宽得多,但当组合框处于显示项目列表的下拉状态时,我想要长文本字符串。
有没有办法让下拉菜单在未激活时显示一个短文本项目,并且只有单击它(显示其项目列表)后,下拉菜单才会以全角显示整个文本?
因此,在激活之前查看 QComboBox 时,它可能会显示类似...
MyLabel: LabelA
注意:文本的其余部分“这里是一个很长的标签。”未显示。
我确实看到了一些类似的问题,但答案未经检查,似乎不起作用。
最佳答案
让我们逐步解决这个问题,覆盖更广泛的范围
第 1 步:下拉列表宽度应等于最大长度的项目。 (我们将使用 QFontMetrics 来查找具有最大长度(以像素为单位)的项目的宽度。
第 2 步:要查找具有最大长度的项目,请在 QStringList 中插入项目并迭代每个项目以查找具有最大长度的项目。
QFont myFont("times", 10); //assuming you are using times new roman
QFontMetrics fm(myFont);
int pixelwide; // stores the length in pixes
int maxLen = 0 ;
QStringList itemList;
QString maxDropdownLen,styleSheet;
itemList<<"LabelA is a very long label here.";
for(int i=0; i<itemList.size();i++){
pixelwide = fm.width(itemList[i]); //get the width in pixels
if(pixelwide>maxLen)
{
maxLen=pixelwide; //setting maximum width in pixels
}
}
第 3 步:现在将下拉列表宽度设置为具有最大长度的项目的宽度。
maxDropdownLen = QString::number(pixelwide);
styleSheet = "QComboBox QAbstractItemView { min-width: %1;}";
qc->addItems(itemList);
qc->setStyleSheet(styleSheet.arg(maxDropdownLen));
关于qt - QComboBox 的初始项目是否可以显示比项目列表中更短的文本项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45538854/