How to change the color of QStringListModel elements?

I have

QListView *myListView; QStringList *myStringList; QStringListModel *myListModel; 

which I fill with such data:

 myStringList->append(QString::fromStdString(...)); myListModel->setStringList(*myStringList); myListView->setModel(myListModel); 

I want to change the font color of some entries in the list, so I tried:

 for (int i = 0; i < myListModel->rowCount(); ++i) { std::cerr << myListModel->index(i).data().toString().toStdString() << std::endl; myListModel->setData(myListModel->index(i), QBrush(Qt::green), Qt::ForegroundRole); } 

The data prints correctly, but the color does not change. What am I missing?

+5
source share
1 answer

QStringListModel only supports the Qt::DisplayRole and Qt::EditRole .

You need to override the QStringListModel::data() and QStringListModel::setData() methods to support other roles.

Example:

 class CMyListModel : public QStringListModel { public: CMyListModel(QObject* parent = nullptr) : QStringListModel(parent) {} QVariant data(const QModelIndex & index, int role) const override { if (role == Qt::ForegroundRole) { auto itr = m_rowColors.find(index.row()); if (itr != m_rowColors.end()); return itr->second; } return QStringListModel::data(index, role); } bool setData(const QModelIndex & index, const QVariant & value, int role) override { if (role == Qt::ForegroundRole) { m_rowColors[index.row()] = value.value<QColor>(); return true; } return QStringListModel::setData(index, value, role); } private: std::map<int, QColor> m_rowColors; }; 
+6
source

All Articles