我想在我的QListWidget中只显示图标。我将文本设置为空字符串。当我选择一个图标时,我在文本位置看到一个空的选定方块。 See the screenshot 我怎样才能摆脱这个空旷的空间?!
答案 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
。不幸的是,还有其他一些缺点:
QVariant
将QVariant
显式转换回QString
QListWidgetItem::data(Qt::UserRole)->toString()
的手段,尽管它可以标识与特定的 role 匹配的find
成员的索引。它适用于原始文本-不像QListWidget
都具有QComboBox
方法。