【问题标题】:How to customize QCombobox with multiple comlumns如何自定义具有多列的组合框
【发布时间】:2017-09-08 20:21:27
【问题描述】:

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

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

【问题讨论】:

    标签: qt qcombobox


    【解决方案1】:

    您应该创建新的自定义 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! 感谢大家的回复!

    【讨论】:

    • 目前我的三个图标只在我点击 QCombobox 的下拉列表时显示,项目只显示文本。我希望在当前项目上显示文本和三个图标,而不是单击。
    • 你的意思是你在下拉列表中看到三个是打开的,但不是正常情况?
    • 为此,您需要按照@jeka 的建议覆盖 QComboBox 的“paintEvent()”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      相关资源
      最近更新 更多