如何在QListWidget中显示没有文字的图标?

时间:2011-11-05 23:07:37

标签: qt qt4 icons qlistwidget

我想在我的QListWidget中只显示图标。我将文本设置为空字符串。当我选择一个图标时,我在文本位置看到一个空的选定方块。 See the screenshot 我怎样才能摆脱这个空旷的空间?!

4 个答案:

答案 0 :(得分:7)

使用NULL代替

ui->listWidget->addItem(new QListWidgetItem(QIcon(":/res/icon"),NULL));

答案 1 :(得分:4)

如何在QListWidget中添加图标?这应该工作正常(我从资源文件加载图标):

ui->listWidget->addItem(new QListWidgetItem(QIcon(":/res/icon"), ""));

修改

从屏幕截图中我看到你的问题是图标下面有一些与空字符串对应的空白区域。您可以通过将非常小的大小设置为列表小部件项的字体来破解此行为。

QListWidgetItem *newItem = new QListWidgetItem;
QFont f;
f.setPointSize(1); // It cannot be 0
newItem->setText("");
newItem->setIcon(QIcon(":/res/icon"));
newItem->setFont(f);
ui->listWidget->addItem(newItem);

这样就可以了。但是,您也可以使用setItemWidget功能并使用自定义设计的窗口小部件,或使用QListView和委托。

答案 2 :(得分:1)

我的解决方案是在图标大小的项目上调用setSizeHint()。我添加了一点填充,因为没有它就切断了选择框。

QListWidgetItem * pItem = new QListWidgetItem(icon, "");
pItem->setSizeHint(iconSize + QSize(4,4));
listWidget->addItem(pItem);

答案 3 :(得分:0)

您要存储文本(作为标识符)但不显示的另一种解决方案是,不为创建者中的QListWidgetItem设置任何文本,而是存储data部分中的文本详细信息。

如果您以后以任何方式使用QListWidgetItem::setText(const QString &text)插入文本,而只需将其更改为QListWidgetItem::setData(int role, const QVariant &value),实际上它就是QListWidgetItem::setData(Qt::UserRole, const QString &text)并依靠{ {1}}可转换为QString。不幸的是,还有其他一些缺点:

  • 要检索值,您需要使用QVariantQVariant显式转换回QString
  • 要搜索特定的匹配Qt不会提供QListWidgetItem::data(Qt::UserRole)->toString()的手段,尽管它可以标识与特定的 role 匹配的find成员的索引。它适用于原始文本-不像QListWidget都具有QComboBox方法。