【发布时间】:2011-11-05 23:07:36
【问题描述】:
我只想在QListWidget 中显示图标。我将文本设置为空字符串。当我选择一个图标时,我在文本位置看到一个空的选定方块。看截图:
我怎样才能摆脱这个空白?!
【问题讨论】:
标签: qt qt4 icons qlistwidget
我只想在QListWidget 中显示图标。我将文本设置为空字符串。当我选择一个图标时,我在文本位置看到一个空的选定方块。看截图:
我怎样才能摆脱这个空白?!
【问题讨论】:
标签: qt qt4 icons qlistwidget
使用 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 函数并使用自定义设计的小部件,或者使用 QListView 和委托。
【讨论】:
我的解决方案是在具有图标大小的项目上调用 setSizeHint()。我添加了一点填充,因为没有它选择框被切断了。
QListWidgetItem * pItem = new QListWidgetItem(icon, "");
pItem->setSizeHint(iconSize + QSize(4,4));
listWidget->addItem(pItem);
【讨论】:
如果您确实想要存储文本(作为标识符)但不显示它,另一种解决方案是不在创建者中为 QListWidgetItems 设置任何文本,而是存储文本data 部分中的详细信息。
如果您之后将文本放入,无论如何您将使用QListWidgetItem::setText(const QString &text),您只需将其更改为QListWidgetItem::setData(int role, const QVariant &value),实际上将是QListWidgetItem::setData(Qt::UserRole, const QString &text),并依赖QString 可转换为QVariant。不幸的是,反过来也有一些缺点:
QVariant 显式转换回QString - 使用QListWidgetItem::data(Qt::UserRole)->toString()
find 方法来识别匹配特定角色 的QListWidget 成员的索引,尽管它确实用于原始文本 - 不像 QComboBox,它同时具有 findXXXX 方法。【讨论】: