我有一个QListWidget,我想用一个自定义小部件添加一堆项目:
listWidget = QListWidget()
item = QListWidgetItem()
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Unchecked)
listWidget.addItem(item)
widget = MyLabelAndPushButton()
item.setSizeHint(widget.sizeHint())
listWidget.setItemWidget(item, widget)
顾名思义,MyLabelAndPushButton只是一个小部件,在布局中包含一个QLabel和一个QPushButton。问题是我不能使用出现在小部件旁边的listwidget中的复选框。它看起来完全正常,但当我点击它时什么也没有发生。如果我用setItemWidget删除行,它就可以正常工作了。我做错什么了?在
编辑:
在bugreports.qt.io/browse/QTBUG-16386上报告了错误,但得到的答复是“API不是为您打算的那样设计的”和“如果您想显示自定义小部件,请使用QListView和子类QItemDelegate。”因此很明显这不是一个bug,只是API无法处理的问题。在
我不知道为什么当widget被设置时列表项不想改变它的状态。我想解决这个问题的方法可能是在小部件中添加一个复选框,或者连接到listwidget的itemClicked信号并在那里重置项的状态。请看下面的一个例子是否对你有用:
希望这对你有帮助,谢谢
这要么是按预期工作,而且在文档中描述得不够(my+1用于此),要么是一个bug。在
为了确定这一点,我将在https://bugreports.qt.io上提交一个bug,看看他们对此有何评论。在
The docs for QListWidget::setItemWidget说:
我认为“静态内容”是指非交互式的,这表明在使用QListWidget时这是一个已知的限制。在
相关问题 更多 >
编程相关推荐