我想为我的QComboBox
创建一个项目,该项目连续显示一个字符串和4个像素图(最终用法是用户可以从颜色方案列表中选择)。
任何人都可以帮我定制QStandardItem
以获得此效果吗?我以为我可以使用行来做它,但我没有太多运气。这是我到目前为止所尝试的......
myComboBox = QtGui.QComboBox()
item = QtGui.QStandardItem()
item.setRowCount(4)
colour1 = QtGui.QPixmap(16, 16)
colour1 .fill(QtGui.QColor("red"))
colour2 = QtGui.QPixmap(16, 16)
colour2 .fill(QtGui.QColor("blue"))
colour3 = QtGui.QPixmap(16, 16)
colour3 .fill(QtGui.QColor("white"))
childitem1 = QtGui.QStandardItem(QtGui.QIcon(colour1), "1")
childitem2 = QtGui.QStandardItem(QtGui.QIcon(colour2), "2")
childitem3 = QtGui.QStandardItem(QtGui.QIcon(colour3), "3")
item.setChild(0, childitem1)
item.setChild(1, childitem2)
item.setChild(2, childitem3)
myComboBox.model().appendRow(item)
但我只是得到一个空项目,没有一个孩子可见 - 我很有可能完全误解了它是如何工作的:)
答案 0 :(得分:1)
您必须创建QStandarItemModel,将项目附加到其中,最后您必须使用myComboBox.setModel()
将此模型设置为组合框。
像这样的东西
itemModel = QStandardItemModel()
# create your items as you want
itemModel.appendRow(your_items)
myComboBox.setModel(itemModel)
答案 1 :(得分:0)
我通过将表格视图放入组合框中来设法得到一种半解决方案:
itemModel = QtGui.QStandardItemModel()
item1 = QtGui.QStandardItem("1")
item2 = QtGui.QStandardItem("2")
item3 = QtGui.QStandardItem("3")
itemModel.appendRow([item1, item2, item3])
myComboBox.setModel(itemModel)
tv = QtGui.QTableView()
tv.setModel(itemModel)
tv.horizontalHeader().setVisible(False)
tv.verticalHeader().setVisible(False)
tv.resizeColumnsToContents()
tv.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
myComboBox.setView(tv)
这不是100%漂亮,但它只是做了工作!感谢您的帮助。