Qt 如何使用多个组件定制QCombobox

Qt 如何使用多个组件定制QCombobox,qt,qcombobox,Qt,Qcombobox,我正在使用QCOMBOX,我希望QCOMBOX中的每个项目都显示三个图标。但目前,QCombobox中的每个项目只显示一个图标 每个图标都应该动态更改。重新实现paintEvent,或者使用带有所有3个图标的大图标图像。您应该创建新的自定义QAbstractItemDelegate,并使用voidQComboBox::setItemDelegate(QAbstractItemDelegate*delegate)api将其设置为QComboBox 在委托中,您需要实现 virtual void

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


每个图标都应该动态更改。

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

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

在委托中,您需要实现

virtual void    paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0
按你的要求

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

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

当我实现上述功能时,这些图标仅显示为单击的下拉列表。在正常情况下,文本仅显示。因此,对于正常情况下的三个图标和文本显示,我们必须在子类QCOMBOX的情况下重新实现QCOMBOX的paintEvent,或者在没有子类QCOMBOX的情况下使用eventFilter捕捉QCOMBOX的paintEvent!
谢谢你的回复

目前我的三个图标仅在我点击QCombobox下拉列表时显示,项目仅显示文本。我希望文本和三个图标显示在当前项目上,而不是单击。您的意思是您看到下拉列表上的三个图标处于打开状态,但不是在正常情况下?为此,您需要按照@jeka的建议覆盖QComboBox的“paintEvent()”