gpt4 book ai didi

python - 无法使用自定义小部件更改可检查 QListViewItem 的状态

转载 作者:太空狗 更新时间:2023-10-30 01:24:15 24 4
gpt4 key购买 nike

我有一个 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 的小部件。问题是我无法使用出现在小部件旁边的列表小部件中的复选框。它看起来完全正常,但是当我点击它时没有任何反应。如果我删除带有 setItemWidget 的行,它会正常工作。我做错了什么?

编辑:

bugreports.qt.io/browse/QTBUG-16386 报告了错误但得到的回复是“API 不是为你打算做的事情而设计的”和“如果你想显示自定义小部件,请使用 QListView 和子类 QItemDelegate。”所以显然这不是错误,只是 API 无法处理的问题。

最佳答案

我不确定为什么列表项不想在设置小部件时更改其状态。我想这个问题的解决方法是在您的小部件中添加一个复选框或连接到列表小部件的 itemClicked。在那里发出信号并重置项目的状态。请查看以下示例是否适合您:

import sys
from PyQt4 import QtGui, QtCore

class MainForm(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainForm, self).__init__(parent)

listWidget = QtGui.QListWidget()

item = QtGui.QListWidgetItem()
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
listWidget.addItem(item)

widget = QtGui.QCheckBox('test')
item.setSizeHint(widget.sizeHint())
listWidget.setItemWidget(item, widget)

listWidget.itemClicked.connect(self.on_listWidget_itemClicked)

self.setCentralWidget(listWidget)

def on_listWidget_itemClicked(self, item):
if item.listWidget().itemWidget(item) != None:
if item.checkState() == QtCore.Qt.Checked:
item.setCheckState(QtCore.Qt.Unchecked)
else:
item.setCheckState(QtCore.Qt.Checked)

def main():
app = QtGui.QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()

if __name__ == '__main__':
main()

希望这对你有帮助,问候

关于python - 无法使用自定义小部件更改可检查 QListViewItem 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com