'How to show icons without text in QListWidget?
I want to show only icons in my QListWidget. I set text to empty string. When I select an icon I see an empty selected square on the text place. See the screenshot:

How can I get rid of this empty space?!
Solution 1:[1]
use NULL instead
ui->listWidget->addItem(new QListWidgetItem(QIcon(":/res/icon"),NULL));
Solution 2:[2]
How do you add an icon in your QListWidget? This should work fine (I am loading the icon from the resource file) :
ui->listWidget->addItem(new QListWidgetItem(QIcon(":/res/icon"), ""));
EDIT
From the screenshot I see that your problem is that there is some white space below the icon corresponding to the empty string. You could hack this behavior by setting a very small size to the font of the list widget item.
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);
This will do the trick. However you could also use the setItemWidget function and use your custom designed widget, or use a QListView and a delegate.
Solution 3:[3]
My solution was to call setSizeHint() on the item with the size of the icon. I added a little padding because the selection box was cut off without it.
QListWidgetItem * pItem = new QListWidgetItem(icon, "");
pItem->setSizeHint(iconSize + QSize(4,4));
listWidget->addItem(pItem);
Solution 4:[4]
An alternative solution where you do want to store text (as an identifier) but not show it, is not to set ANY text for the QListWidgetItems in the creator but instead store the text details in the data part.
If you are putting the text in afterwards anyhow you'd be using QListWidgetItem::setText(const QString &text) and you just need to change that to QListWidgetItem::setData(int role, const QVariant &value) which in practice would be QListWidgetItem::setData(Qt::UserRole, const QString &text) and rely on a QString being convertible to a QVariant. Unfortunately there are some shortcomings going the other way:
- To retrieve the value you need to explicitly convert the
QVariantback to aQString- by usingQListWidgetItem::data(Qt::UserRole)->toString() - To search for a particular match Qt does not provide a
findmeans to identify the index(es) of the members of aQListWidgetthat match a particular role though it does for the original text - unlike, say aQComboBoxwhich hasfindXXXXmethods for both.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | compiler |
| Solution 2 | |
| Solution 3 | mjk99 |
| Solution 4 | SlySven |
