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?!
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?!
use NULL instead
ui->listWidget->addItem(new QListWidgetItem(QIcon(":/res/icon"),NULL));
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.
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);
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 QListWidgetItem
s in the creator but instead store the text details in the data
part.
Specifically you want to use this QListWidgetItem(QListWidget *parent = nullptr, int type = Type)
constructor that can be used without any arguments. Then you can assign an icon, but no text afterwards, before inserting it into the QListWidget
.
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:
QVariant
back to a QString
- by using QListWidgetItem::data(Qt::UserRole)->toString()
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.The project I code for had exactly this issue (we had unwanted text at the bottom which was set to a font size of 1
but it still showed up) which I eventually fixed like this and it works:
© 2022 - 2024 — McMap. All rights reserved.