【问题标题】:Can the initial item of a QComboBox display a shorter text item than in the item list?QComboBox 的初始项目能否显示比项目列表中更短的文本项目?
【发布时间】:2017-08-07 03:04:18
【问题描述】:

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

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

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

有没有办法让下拉菜单在未激活时显示一个短文本项目,并且只有在单击它(显示它的项目列表)后,下拉菜单才会以全宽显示整个文本?

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

MyLabel: LabelA

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

我确实看到了一些类似的问题,但答案没有得到检查,而且似乎没有用。

【问题讨论】:

  • 如果我们在点击后设置QComboBox文本并处理带有索引的ComboBox,对你有用吗?
  • 不确定我是否完全理解您的建议,但我会尝试研究一下。
  • 我搜了一下,不可能。你必须手动完成。使用信号来更改文本,或者创建一个新类并从 QComboBox 继承并在继承的类中执行此操作。
  • 您可以为组合框和下拉菜单设置不同的宽度,如果这样就足够了...例如通过 CSS:QComboBox QAbstractItemView { min-width: XYZ; }
  • 好的,我会试一试,并最终报告我的发现。

标签: qt qt5 qcombobox


【解决方案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));

【讨论】:

  • 谢谢。我很快就插入了它,但它不起作用。可能是因为我的 QComboBox 被埋在 layout->group->layout->widget->layout 中......我将不得不玩一下它。
猜你喜欢
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2014-09-28
相关资源
最近更新 更多