我正在PySide2中编写一个应用程序,并开发了一个继承自Qdialog的类,用于显示带有复选框的列表:
类的代码:
class ListDialog(QDialog):
def __init__(self, items, all_checked = False, parent=None):
super(ListDialog, self).__init__(parent=parent)
self.setWindowTitle(title)
form = QFormLayout(self)
self.listView = QListView(self)
self.listView.setSelectionMode(QTableView.NoSelection)
form.addRow(self.listView)
self.model = QStandardItemModel(self.listView)
for item in items:
# create an item with a caption
standardItem = QStandardItem(item)
standardItem.setCheckable(True)
standardItem.setEditable(False)
if all_checked:
standardItem.setCheckState(Qt.Checked)
self.model.appendRow(standardItem)
self.listView.setModel(self.model)
结果(加上一些额外的代码):
实际上,您可以选中多个复选框,但我需要将其设置为单选。你知道吗
注意行:
self.listView.setSelectionMode(QTableView.NoSelection)
起初,我认为setSelectionMode
是造成这种行为的原因,但这只控制列表项上的突出显示,而不控制其复选框。因此,我将其设置为NoSelection
,因为没有突出显示文本部分,复选框起作用了!你知道吗
有没有一种简单的方法可以将选择模式设置为单模式?或者我应该重载控制复选框的信号以取消选择所有的框,然后选择我单击的那个?你知道吗
一个简单的方法是使用代理模型,它将处理单个选择和信号
QStandardItemModel::itemChanged
,以知道用户何时单击一个项目。你知道吗例如:
当用户单击一个项目时,
checkSingleCheck
方法将被调用。但是,如果您希望能够编辑这些项,则必须调整此函数。你知道吗相关问题 更多 >
编程相关推荐