2010-10-21 4 views

Répondre

4

je suppose que la seule façon de le faire serait d'écrire votre propre modèle, héritant QAbstractListModel, réimplémentant rowCount() et data() où vous pouvez définir la couleur d'arrière-plan pour chaque élément (en utilisant le rôle BackgroundRole).

Ensuite, utilisez QComboBox::setModel() pour que le QComboBox l'affiche.

Voici un exemple simple, où je créé mon propre modèle de liste, héritant 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(); 
    } 
}; 

Il est maintenant facile d'utiliser ce modèle avec la zone de liste déroulante:

comboBox->setModel(new ItemList); 
+0

Merci beaucoup! Je vais essayer ça. –

Questions connexes