Полагаю, единственный способ сделать это - написать собственную модель, унаследовав 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);