Я не могу выяснить, как изменить цвет текста одного конкретного объекта QComboBox. Я смог изменить Цвет фона объекта:
comboBox->setItemData(i, Qt::green, Qt::BackgroundRole);
(Qt::ForegroundRole
имеемый никакой эффект вообще, Qt 4.6, Ubuntu 10.04)
и я смог изменить цвет текста всех объектов с таблицей стилей, но я не могу выяснить, как изменить цвет текста одного указанного объекта.
Спасибо за помощь!
Не думайте, что это решение, но, если это удобно, в некоторых случаях вы можете использовать QPixmap-s для поля со списком. Взгляните на методы QComboBox :: insertItem.
Я никогда не пытался это сделать, но думаю, единственный способ сделать это - написать свою собственную модель, унаследовав 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);
Я попробовал, и она работает нормально.