Qt - 如何通过单击文本来切换QListWidgetItem

时间:2014-10-29 19:08:53

标签: qt qlistwidget

您可以通过单击标签字符串来切换QCheckBox。这为用户提供了一个非常大的点击目标。

但是,如果我有一个带有可检查项目的QListWidget,则用户必须在小方框内单击以切换项目。这使得检查项目变得乏味,甚至对我们这些患有重复性压力损伤的人来说有点痛苦。

我尝试连接到QListWidget itemClicked信号并切换项目复选框。如果用户点击项目文本,这工作正常。但如果他们实际点击了该框,则检查状态会被切换,然后发送itemClicked信号,代码将检查状态切换回原来的位置。

有人建议通过单击复选框或项目文本来切换检查状态吗?

...谢谢

3 个答案:

答案 0 :(得分:2)

您可以保持标记Qt::ItemIsUserCheckable未设置,然后单击该复选框时,项目的检查状态不会发生变化。然后,当itemClicked的{​​{1}}信号连接到切换检查状态的插槽时,检查状态将不再被切换两次。

当项目设置了检查状态时,无论用户是否可以检查项目,都会显示项目的复选框。

答案 1 :(得分:1)

QListWidgetItem没有提供任何方式来了解用户点击,标签或框的位置,因此最简单的方法是使用QCheckBox作为窗口小部件。现在QCheckBox的行为将为QCheckBox,用户可以通过点击任意位置(QCheckBox

复选框
for(int r=0;r<7;r++)
{
    QListWidgetItem* lwi = new QListWidgetItem;
    ui->listWidget->addItem(lwi);
    ui->listWidget->setItemWidget(lwi, new QCheckBox(QString("checkBox%1").arg(r)));
}

缺点:如果你有很多物品,它会降低性能。

答案 2 :(得分:0)

这是使用python的解决方案。

saveLocations

在设置QlistWidget之前或添加QlistWidget项之前声明此方法似乎效果很好,并且可以轻松地更改默认listWidget项的checkState。