2010-10-21 3 views

ответ

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); 
+0

Большое спасибо! Я попробую это. –

Смежные вопросы