nigdy nie próbowałem to zrobić, ale myślę, że jedynym sposobem na to byłoby napisać swój własny model, dziedzicząc QAbstractListModel
, reimplementing rowCount()
i data()
gdzie można ustawić kolor dla każdego elementu (przy użyciu TextColorRole
rolę) .
Następnie należy użyć QComboBox::setModel()
, aby wyświetlić je na QComboBox
.
UPDATE
udało mi się to, co chcesz przy użyciu powyższego rozwiązania. Oto prosty przykład.
tworzę własny model listy, dziedzicząc 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();
}
};
Teraz jest łatwy w użyciu tego modelu z pola kombi:
comboBox->setModel(new ItemList);
próbowałem i to działa dobrze.
Wygląda na to, że ta rola jest już przestarzała za pomocą PySide2 i nie ma żadnego efektu. Doktorzy mówią, że używają 'ForegroundRole', ale to też nic dla mnie nie robiło. Być może to jest powód odpowiedzi Jérôme'a – Rafe