Ich habe nie versucht, es zu tun, aber ich denke, den einzigen Weg, es zu tun wäre, Ihr eigenes Modell zu schreiben, QAbstractListModel
vererben, Neuimplementierung rowCount()
und data()
wo Sie die Farbe für jedes Element festlegen können (mit der TextColorRole
Rolle) .
Verwenden Sie dann QComboBox::setModel()
, um das QComboBox
anzuzeigen es anzuzeigen.
UPDATE
ich war in der Lage zu tun, was Sie die obige Lösung wollen verwenden. Hier ist ein einfaches Beispiel.
ich meine eigene Liste Modell erstellt, erbt 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();
}
};
Es ist nun leicht, dieses Modell mit dem Kombinationsfeld zu verwenden:
comboBox->setModel(new ItemList);
ich es versucht und es funktioniert gut.
Es sieht so aus, als ob diese Rolle mit PySide2 veraltet ist und keinen Effekt mehr hat. Die Doktoren sagen, 'ForegroundRole' zu verwenden, aber das tat auch nichts für mich. Vielleicht ist das der Grund für Jérômes Antwort – Rafe