2010-10-21 145 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

非常感謝!我會試試這個。 – 2010-10-21 07:44:18

相關問題