【问题标题】:How can I move the icon above text in QComboBox如何在 QComboBox 中移动文本上方的图标
【发布时间】:2014-05-05 11:19:13
【问题描述】:

我已经查看 QComboBox 源文件有一段时间了,但我不知道我需要更改什么以便图标位于 QComboBox 中的文本上方。

|-----------------------|
|         -----         |
|         |icn|         |
|         -----         |
|    Text label here    |
-------------------------

QCombobox 中的绘制方法非常简单,并且引用了一个名为 QStyleOptionComboBox 的东西,但我不认为我想在这里进行更改,因为这会影响可移植性。

我会不会更好地发明一些新的东西来表现和表现得像一个 QComboBox?

我应该补充一点,我正在考虑更改 ListView 和选定项目,即按钮部分。

【问题讨论】:

    标签: c++ qt qcombobox


    【解决方案1】:

    为了处理组合框下拉视图中图标(装饰)的位置,您需要覆盖其视图选项QAbstractItemView::viewOptions()。让我们创建一个自定义视图并用我们的替换原生组合框视图:

    class ComboView : public QListView
    {
    protected:
        QStyleOptionViewItem viewOptions() const
        {
            // Set icon on the top and center of combo box item.
            QStyleOptionViewItem option = QListView::viewOptions();
            option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
            option.decorationPosition = QStyleOptionViewItem::Top;
            option.displayAlignment = Qt::AlignCenter;   
            return option;
        }
    };
    

    对于组合框:

    QComboBox cb;
    cb.setView(new ComboView); // Sets the custom view.
    cb.addItem(QIcon("icon.png"), "Item1");
    cb.addItem(QIcon("icon.png"), "Item2");
    cb.show();
    

    【讨论】:

    • 哇,谢谢,这对下拉列表的内容非常有效,尽管这不会影响所选项目?我只能假设相同的样式选项可以应用到 QComboBox 的按钮部分?
    • @aManFromOuterSpace,理论上是的,但我认为它不会像下拉视图那样简单。可编辑部分假设是行编辑,所以我不确定我是否知道如何在不覆盖 paint() 事件等的情况下修改它。
    • 我以为 QCombobox 是由一个按钮和一个弹出窗口组成的?我将继续研究如何以您所描述的相同方式对齐按钮部分。
    • 嗨!你能帮助我吗。我需要隐藏项目的文本标签。这可能吗?
    • @Šerg,隐藏文本标签是什么意思?如果你只是将一个空字符串设置为文本呢?
    猜你喜欢
    • 2013-06-14
    • 2020-01-30
    • 1970-01-01
    • 2020-10-17
    • 2014-07-09
    • 2016-04-18
    • 2021-09-09
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多