Qt QComboBox с разным цветом фона для каждого элемента? - PullRequest
1 голос
/ 21 октября 2010

Есть ли способ установить разные цвета фона для каждого элемента в QComboBox?

1 Ответ

4 голосов
/ 21 октября 2010

Полагаю, единственный способ сделать это - написать собственную модель, унаследовав 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...