【发布时间】:2017-09-08 20:21:27
【问题描述】:
我正在使用 QCombobox,我希望 QCombobox 中的每个项目都显示三个图标。但是目前QCombobox中的每一项都只显示一个图标!
每个图标都应该动态改变。
【问题讨论】:
我正在使用 QCombobox,我希望 QCombobox 中的每个项目都显示三个图标。但是目前QCombobox中的每一项都只显示一个图标!
每个图标都应该动态改变。
【问题讨论】:
您应该创建新的自定义 QAbstractItemDelegate 并使用 void QComboBox::setItemDelegate ( QAbstractItemDelegate * delegate ) api 将其设置为 QComboBox。
在delegate中,你需要实现
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() )
总结:
当我按上述方式实现时,图标仅显示为单击下拉列表。正常情况下,只显示文字。因此,对于正常情况下的三个图标和文本显示,我们必须重新实现 QCombobox 的paintEvent 以防子类 QCombobox 或使用 eventFilter 来捕获没有子类 QComboBox 的 QCombobox 的paintEvent! 感谢大家的回复!
【讨论】:
重新实现paintEvent,或者使用带有全部3个图标的大图标图像。
【讨论】: