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

Can the initial item of a QComboBox display a shorter text item than in the item list?

我有一个带有长标签的 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));