如何使用多列自定义Combobox

时间:2012-04-24 10:16:17

标签: qt qcombobox

我正在使用QCombobox,我希望QCombobox中的每个项目都显示三个图标。但目前,QCombobox中的每个项目只显示一个图标!

每个图标都应动态更改。

2 个答案:

答案 0 :(得分:1)

重新实现paintEvent,或使用带有全部3个图标的大图标图像。

答案 1 :(得分:1)

您应该使用void QComboBox::setItemDelegate ( QAbstractItemDelegate * delegate ) api创建新的自定义QAbstractItemDelegate并将其设置为QComboBox。

在委托中,您需要实施

virtual void    paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0

根据您的要求。

您还需要使用以下API为userData中的组合框提供不同的图标,您可以在deletegate的paint方法中使用它来检索图标并绘制它。

void QComboBox::addItem ( const QString & text, const QVariant & userData = QVariant() )

要点:

当我按上述方式实施时,只有图标显示为点击下拉列表。在正常情况下,文本只显示。因此,对于正常情况下的三个图标和文本显示我们必须重新实现QCombobox的paintEvent以防子类QCombobox或使用eventFilter来捕获QCombobox的paintEvent而不使用子类QComboBox! 感谢您的回复!