QComboBox的初始项目是否可以显示比项目列表中更短的文本项目?

时间:2017-08-07 03:04:18

标签: qt qt5 qcombobox

我有一个带有长标签的QComboBox。

qc = new QComboBox;
qc->addItem(tr("LabelA is a very long label here."));

下拉列表中的文字比我想要的要广泛得多,但是当组合框处于显示项目列表的下拉状态时,我想要长文本字符串。

有没有一种方法可以在未激活的情况下使用短文本项目显示下拉列表,只有在单击它(显示它的项目列表)后,下拉列表是否会以全宽显示整个文本?

因此,在激活之前查看QComboBox时,它可能会显示类似......

MyLabel: LabelA

注意:文本的其余部分“在这里是一个很长的标签。”没有显示。

我确实看到了一些类似的问题,但答案未经检查,似乎没有效果。

1 个答案:

答案 0 :(得分:1)

让我们一步一步地解决这个问题,涵盖更广泛的范围

第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));

enter image description here   enter image description here