我如何在QComboBox中移动文本上方的图标

How can I move the icon above text in QComboBox

本文关键字:文本 图标 移动 QComboBox      更新时间:2023-10-16

我一直在看QComboBox源文件一段时间了,我不知道我需要改变什么,以便图标位于QComboBox文本上方。

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

QCombobox中的绘制方法非常简单,引用了QStyleOptionComboBox,但我不认为我想在这里做任何改变,因为这会影响可移植性。

我是不是应该发明一些像QComboBox那样的新东西呢?

我应该补充说,如果我正在考虑改变ListView和选定的项目,即按钮部分。

为了在组合框的下拉视图中处理图标的(装饰)位置,您需要覆盖其视图选项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();