CheckBox 在 ComboBox 中不可见
CheckBox not visible inside ComboBox
我需要用户可以检查我的组合框项目,以便他们可以 select 多个项目。我在 Whosebug 上看到了一些解决方案。我将它应用到我的代码中。它做了一些事情,但复选框还不可见,我还不能 select 任何项目。
我的代码如下
from PySide.QtGui import *
from PySide.QtCore import *
udims = [here goes some items]
cmb = QComboBox()
model = QStandardItemModel(len(udims), 1)
for i, udim in enumerate(udims):
item = QStandardItem(udim)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(Qt.Checked | Qt.CheckStateRole)
model.setItem(i, 0, item)
cmb.setModel(model)
我可以通过为复选框创建 QItemDelegate 的子类,然后将其插入组合框的项目委托来实现这一点。
from PySide.QtCore import *
from PySide.QtGui import *
class CheckBoxDelegate(QItemDelegate):
def __init__(self, parent=None):
super(CheckBoxDelegate, self).__init__(parent)
def createEditor(parent, op, idx):
self.editor = QCheckBox(parent)
udims = ['1001', '1002', '1003', '1004']
cmb = QComboBox()
delegate = CheckBoxDelegate()
cmb.setItemDelegate(delegate)
model = QStandardItemModel(len(udims), 1)
for i, udim in enumerate(udims):
item = QStandardItem(udim)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(Qt.Checked | Qt.CheckStateRole)
model.setItem(i, 0, item)
cmb.setModel(model)
我需要用户可以检查我的组合框项目,以便他们可以 select 多个项目。我在 Whosebug 上看到了一些解决方案。我将它应用到我的代码中。它做了一些事情,但复选框还不可见,我还不能 select 任何项目。
我的代码如下
from PySide.QtGui import *
from PySide.QtCore import *
udims = [here goes some items]
cmb = QComboBox()
model = QStandardItemModel(len(udims), 1)
for i, udim in enumerate(udims):
item = QStandardItem(udim)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(Qt.Checked | Qt.CheckStateRole)
model.setItem(i, 0, item)
cmb.setModel(model)
我可以通过为复选框创建 QItemDelegate 的子类,然后将其插入组合框的项目委托来实现这一点。
from PySide.QtCore import *
from PySide.QtGui import *
class CheckBoxDelegate(QItemDelegate):
def __init__(self, parent=None):
super(CheckBoxDelegate, self).__init__(parent)
def createEditor(parent, op, idx):
self.editor = QCheckBox(parent)
udims = ['1001', '1002', '1003', '1004']
cmb = QComboBox()
delegate = CheckBoxDelegate()
cmb.setItemDelegate(delegate)
model = QStandardItemModel(len(udims), 1)
for i, udim in enumerate(udims):
item = QStandardItem(udim)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
item.setData(Qt.Checked | Qt.CheckStateRole)
model.setItem(i, 0, item)
cmb.setModel(model)