Qt, как мне изменить цвет текста одного элемента QComboBox?(C ++) - PullRequest
11 голосов
/ 18 июня 2010

Я не могу понять, как изменить цвет текста одного конкретного элемента QComboBox.Мне удалось изменить цвет фона элемента:

comboBox->setItemData(i, Qt::green, Qt::BackgroundRole);

(Qt::ForegroundRole не имел никакого эффекта, Qt 4.6, Ubuntu 10.04)

, и я смог изменитьцвет текста для всех элементов таблицы стилей, но я не могу понять, как изменить цвет текста одного указанного элемента.

Спасибо за помощь!

Ответы [ 3 ]

14 голосов
/ 18 июня 2013

Это почти как вы предлагаете, но вы должны изменить роль на Qt::TextColorRole.

comboBox->setItemData(0, QBrush(Qt::red), Qt::TextColorRole);  
4 голосов
/ 18 июня 2010

Я никогда не пытался это сделать, но я думаю, что единственный способ сделать это - написать собственную модель, наследуя QAbstractListModel, переопределив rowCount() и data(), где вы можете установить цвет для каждого элемента ( используя роль TextColorRole).

Затем используйте QComboBox::setModel(), чтобы QComboBox отобразил его.

UPDATE

Я смог сделать то, что вы хотите, используя вышеуказанное решение. Вот простой пример.

Я создал свою собственную модель списка, унаследовав 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::TextColorRole)
         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 голосов
/ 19 июня 2010

Не думайте, что это решение, но, если это удобно, в некоторых случаях вы можете использовать QPixmap-s для вашего комбинированного списка.Взгляните на методы QComboBox :: insertItem.

...