'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:

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 QVariant back to a QString - by using QListWidgetItem::data(Qt::UserRole)->toString()
  • To search for a particular match Qt does not provide a find means to identify the index(es) of the members of a QListWidget that match a particular role though it does for the original text - unlike, say a QComboBox which has findXXXX methods 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