qt - 有没有办法在我的 QListWidget 中禁用 QListWidgetItem?

标签 qt select qlistwidget qlistwidgetitem

我正在使用 QListWidgetItem 在我的 QListWidget 中添加项目。

在某些情况下,我希望我的 QListWidget 的某些行变得不可选择。 (我的意思是我想要一些 QListWidgetItem不可选择的)

有什么办法吗?

PS:我试过了

listWidgetItem->setFlags(Qt::NoItemFlags)

listWidgetItem->setSelected(false);

但它们不会禁用项目的选择。

编辑:

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);

    }

最佳答案

只需删除 Qt::ItemIsSelectable flag来自每个项目:

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

或者,如果您想删除与该项目的所有交互,则删除Qt::ItemIsEnabled

例如

#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();
}

关于qt - 有没有办法在我的 QListWidget 中禁用 QListWidgetItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34975673/

相关文章:

c++ - QPlugin路径和初始化

c++ - Qt 和 Mac OS X 下注册全局热键

c++ - 为什么 QObjectIterator::get_value_ref() 没有在我的 QtLua 源代码分发中实现?

php - 仅允许 "Select"语句用于通过 PHP 执行的查询

python - 选择更新查询 : Lock wait timeout exceeded error

mysql - 从 2 个表中选择,按列计数和分组

c++ - Qt 中的图层管理器

c++ - QSqlQuery.record() 总是空的

Qt - 编辑 QListWidget 行时的信号?

scroll - PyQt4 : is there any signal related to scrollbar?