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

标签 qt qt5 qcombobox

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

enter image description here enter image description here

关于qt - QComboBox 的初始项目是否可以显示比项目列表中更短的文本项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45538854/

相关文章:

qt - 如何从 Qt Designer/.ui 文件将项目数据添加到 QComboBox

qt - 如何将 ListModel 与 SwipeView 结合使用?

c++ - 读取 http 请求 header (Qt/c++)

javascript - 在 QML 中动态创建 ListModel

qt - Yocto:删除 packageconfig 项

qt - 如何从 qrc 文件中获取所有图像?

c++ - 捕获 QComboBox 中的文本更改事件

python - 使用信号和槽在两个小部件之间发送消息

css - 后面没有方框的圆形QComboBox

qt - 调整窗口大小时文本变得模糊