【问题标题】:Is there any way to disable QListWidgetItem in my QListWidget?有没有办法在我的 QListWidget 中禁用 QListWidgetItem?
【发布时间】:2016-01-24 12:16:52
【问题描述】:

我正在使用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 select qlistwidget qlistwidgetitem


【解决方案1】:

只需从每个项目中删除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();
}

【讨论】:

  • 赦免? “SSSCE”是什么意思?
  • 'QStringList _strList = _str.split(",",QString::KeepEmptyParts,Qt::CaseInsensitive); for(int i = 0; i addItem(_listWidgetItem); if(_strList[i] == "未知"){ _listWidgetItem->setSelected(false); _listWidgetItem->setTextColor(Qt::red); } }'
  • 请编辑您的原始帖子并在其中添加代码:) 在这里......很难理解,这样写。
【解决方案2】:

您可以尝试以下方法:

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

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

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

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

M.

【讨论】:

  • 出于另一个原因,我使用了“connect(listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(itemIsSelected(QListWidgetItem*)));”。当项目可选时。出于另一个原因,我想解剖其中一些
  • 你应该能够在同一个函数中处理额外的复杂性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
相关资源
最近更新 更多