QListWidget:更改选择而不触发 selectionChanged

QListWidget: change selection without triggering selectionChanged

我正在使用 QListWidget 来控制和显示某些状态。

现在要控制状态,使用小部件中的用户选择。 为了对此做出回应,我连接了 selectionChanged 信号。

但是状态可以自行改变,当这种情况发生时,我有一个全新的状态并希望选择改变。

为了实现这一点,我正在像这样遍历状态和项目:

    for item, s in zip(items, state):
        item.setSelected(s)

但是这会触发 selectionChanged(即使在每次迭代中) 我根本不希望发生这种情况。

是否有其他方式来响应选择更改?

您可以简单地使用 QSignalBlocker class。在调用发出信号的函数之前,实例化一个 QSignalBlocker 对象。

// ui->ListWidget is available.
{
    QSignalBlocker blocker( ui->ListWidget );
    for ( auto item : items )
    {
        item->setSelected();
    }
}