如何在QComboBox中将图标移到文本上方

时间:2014-05-05 11:19:14

标签: c++ qt qcombobox

我一直在查看QComboBox源文件一段时间,我无法弄清楚我需要更改什么,以便图标位于QComboBox中的文本上方。

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

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

我是否会更好地发明新的行为并表现得像QComboBox?

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

1 个答案:

答案 0 :(得分:3)

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