我只想在我的 QListWidget 中显示图标。我将文本设置为空字符串。当我选择一个图标时,我在文本位置看到一个空的选定方块。看截图 我怎样才能摆脱这个空白空间?!
4 回答
改用 NULL
ui->listWidget->addItem(new QListWidgetItem(QIcon(":/res/icon"),NULL));
如何在 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
功能并使用自定义设计的小部件,或使用 aQListView
和委托。
我的解决方案是在具有图标大小的项目上调用 setSizeHint() 。我添加了一点填充,因为没有它选择框被切断了。
QListWidgetItem * pItem = new QListWidgetItem(icon, "");
pItem->setSizeHint(iconSize + QSize(4,4));
listWidget->addItem(pItem);
您确实想要存储文本(作为标识符)但不显示它的替代解决方案是不在创建者中为 s 设置任何文本,QListWidgetItem
而是将文本详细信息存储在data
部件中。
如果您稍后将文本放入您将使用的文本,QListWidgetItem::setText(const QString &text)
您只需将其更改为QListWidgetItem::setData(int role, const QVariant &value)
实践中的文本QListWidgetItem::setData(Qt::UserRole, const QString &text)
并依赖QString
可转换为QVariant
. 不幸的是,反过来也有一些缺点:
- 要检索值,您需要使用显式将
QVariant
back 转换为QString
-QListWidgetItem::data(Qt::UserRole)->toString()
- 为了搜索特定的匹配,Qt 并没有提供一种方法来识别与特定角色
find
匹配的 a成员的索引,尽管它确实适用于原始文本 - 不像 a它具有两者的方法。QListWidget
QComboBox
findXXXX