您可以通过单击标签字符串来切换QCheckBox。这为用户提供了一个非常大的点击目标。
但是,如果我有一个带有可检查项目的QListWidget,则用户必须在小方框内单击以切换项目。这使得检查项目变得乏味,甚至对我们这些患有重复性压力损伤的人来说有点痛苦。
我尝试连接到QListWidget itemClicked信号并切换项目复选框。如果用户点击项目文本,这工作正常。但如果他们实际点击了该框,则检查状态会被切换,然后发送itemClicked信号,代码将检查状态切换回原来的位置。
有人建议通过单击复选框或项目文本来切换检查状态吗?
...谢谢
答案 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。