Is there any way to disable QListWidgetItem in my QListWidget?

s.m picture s.m · Jan 24, 2016 · Viewed 9.7k times · Source

I am using QListWidgetItem to add Items in my QListWidget.

In some situations, I want some rows of my QListWidget become non selectable. (I mean I want some QListWidgetItem to be non selectable)

Is ther any way to do this?

PS: I tried

listWidgetItem->setFlags(Qt::NoItemFlags)

listWidgetItem->setSelected(false);

but they don't disable the selection of items.

Edit:

QStringList _strListClients = _strClients.split(",",QString::KeepEmptyParts,Qt::CaseInsensitive);

for(int i = 0; i < _strListClients.count(); i++)//Add Client's Check Boxes
{
    QListWidgetItem* _listWidgetItem = new QListWidgetItem(_strListClients[i], listWidgetClients);
    listWidgetClients->addItem(_listWidgetItem);

    if(_strListClients[i] == "Unknown"){
        _listWidgetItem->setSelected(false);
        _listWidgetItem->setTextColor(Qt::red);
        _listWidgetItem->setFlags(_listWidgetItem->flags() & ~Qt::ItemIsSelectable);

    }

}

Answer

peppe picture peppe · Jan 24, 2016

Just remove the Qt::ItemIsSelectable flag from each item:

item->setFlags(item->flags() & ~Qt::ItemIsSelectable);

Or remove Qt::ItemIsEnabled if you want to remove all interaction with the item.

E.g.

#include <QtWidgets>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QListWidget widget;

    for (int i = 0; i < 100; ++i) {
        QListWidgetItem *item = new QListWidgetItem(QStringLiteral("Item %1").arg(i));
        if (i % 2 == 0) // disable one every two
            item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
        widget.addItem(item);
    }

    widget.show();

    return app.exec();
}