1

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

    }

}

4

2 回答 2

4

只需 从每个项目中删除Qt::ItemIsSelectable标志:

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();
}
于 2016-01-24T12:27:37.547 回答
1

您可以尝试以下方法:

1)覆盖点击/选择事件(对不起,我不记得确切的名称。这样做你可以在项目上有某种标志/布尔值,如果设置为不可选择,你只需返回。

2)而不是覆盖你只是连接到信号并执行上述检查,如果你不想选择那个项目,你可以在之后取消选择它。

有点解决方法,但我不知道是否有内置的方法可以这样做。检查文档我没有看到项目本身的禁用方法。

如果你走在列表视图的道路上,你应该对它有更多的控制,也在显示器上,所以你可以将它显示为灰色等。不过,视图需要做更多的工作。

M。

于 2016-01-24T12:26:20.253 回答