我一直在查看QComboBox源文件一段时间,我无法弄清楚我需要更改什么,以便图标位于QComboBox中的文本上方。
|-----------------------|
| ----- |
| |icn| |
| ----- |
| Text label here |
-------------------------
QCombobox中的paint方法非常简单,引用了一些名为QStyleOptionComboBox的东西,但我不认为我想在这里进行更改,因为这会影响可移植性。
我是否会更好地发明新的行为并表现得像QComboBox?
我应该补充说,我正在考虑更改ListView和所选项目,即按钮部分。
答案 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();