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

时间:2016-01-24 12:16:52

标签: qt select qlistwidget qlistwidgetitem

我正在使用val lines = sc.textFile("followers.txt").map(s => { val substrings = s.split(" ") (substrings(0), substrings(1)) }) QListWidgetItem中添加项目。

在某些情况下,我希望我QListWidget的某些行变为不可选择。 (我的意思是我希望某些QListWidget 无法选择

有没有办法做到这一点?

PS:我试过了

QListWidgetItem

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

编辑:

listWidgetItem->setFlags(Qt::NoItemFlags)

listWidgetItem->setSelected(false);

}

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

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

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

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

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

微米。

答案 1 :(得分:1)

只需从每个项目中移除Qt::ItemIsSelectable flag

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

如果您要删除与该项目的所有互动,请删除Qt::ItemIsEnabled

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