QT, Как я изменяю цвет текста одного объекта QComboBox? (C++)

Я не могу выяснить, как изменить цвет текста одного конкретного объекта QComboBox. Я смог изменить Цвет фона объекта:

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

(Qt::ForegroundRole имеемый никакой эффект вообще, Qt 4.6, Ubuntu 10.04)

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

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

11
задан SIMEL 31 December 2017 в 09:43
поделиться

2 ответа

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

0
ответ дан 3 December 2019 в 06:45
поделиться

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

Затем используйте 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::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);

Я попробовал, и она работает нормально.

4
ответ дан 3 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: