有没有办法为QComboBox
中的每个项目设置不同的背景颜色?
答案 0 :(得分:4)
我想这样做的唯一方法就是编写自己的模型,继承QAbstractListModel
,重新实现rowCount()
和data()
,您可以在其中设置每个项目的背景颜色(使用BackgroundRole
角色。
然后,使用QComboBox::setModel()
使QComboBox
显示它。
这是一个简单的例子,我创建了自己的列表模型,继承了QAbstractListModel
:
class ItemList : public QAbstractListModel
{
Q_OBJECT
public:
ItemList(QObject *parent = 0) : QAbstractListModel(parent) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const { return 5; }
QVariant data(const QModelIndex &index, int role) const {
if (!index.isValid())
return QVariant();
if (role == Qt::BackgroundRole)
return QColor(QColor::colorNames().at(index.row()));
if (role == Qt::DisplayRole)
return QString("Item %1").arg(index.row() + 1);
else
return QVariant();
}
};
现在可以很容易地将此模型与组合框一起使用:
comboBox->setModel(new ItemList);