Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QComboBox的初始项能否显示比项列表中短的文本项?_Qt_Qt5_Qcombobox - Fatal编程技术网

Qt QComboBox的初始项能否显示比项列表中短的文本项?

Qt QComboBox的初始项能否显示比项列表中短的文本项?,qt,qt5,qcombobox,Qt,Qt5,Qcombobox,我有一个长标签的QComboBox qc = new QComboBox; qc->addItem(tr("LabelA is a very long label here.")); 下拉列表中的文本比我想要的要宽得多,但是当组合框处于下拉状态时,我想要一个长文本字符串,显示项目列表 是否有一种方法可以使下拉列表在未激活时显示一个短文本项,并且只有在单击它(显示它的项目列表)后,下拉列表才会以全宽显示整个文本 因此,在激活QComboBox之前查看它时,它可能会显示以下内容 MyLabe

我有一个长标签的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
          }
    }
maxDropdownLen = QString::number(pixelwide);
styleSheet = "QComboBox QAbstractItemView { min-width: %1;}";
qc->addItems(itemList);
qc->setStyleSheet(styleSheet.arg(maxDropdownLen));

如果我们在单击并处理带有索引的组合框后设置QComboBox文本,它对您有效吗?不确定我是否完全理解您的建议,但我将尝试研究它。我搜索了它,不可能。你必须手动操作。使用信号来更改文本,或者创建一个新类并从QComboBox继承,然后在继承的类中执行该操作。如果足够的话,您可以为组合框和下拉列表设置不同的宽度。。。例如,通过CSS:
QComboBox QAbstractItemView{min width:XYZ;}
Ok,我会尝试一下,并最终报告我的发现。谢谢。我很快就把电源插上了,但没用。可能是因为我的QComboBox被隐藏在布局->组->布局->小部件->布局中。。。我得玩一会儿。