如何更改QStringListModel项目的颜色?

编程入门 行业动态 更新时间:2024-10-19 01:22:25
本文介绍了如何更改QStringListModel项目的颜色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有

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

我用这样的数据填充:

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

我想更改某些列表条目的字体颜色,所以我尝试了:

I want to change the font-color of some list entries, 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 is print out to cerr correctly, but the color does not change. What am I missing?

推荐答案

QStringListModel仅支持Qt::DisplayRole和Qt::EditRole角色.

您必须重新实现QStringListModel::data()和QStringListModel::setData()方法以支持其他角色.

You have to reimplement the QStringListModel::data() and QStringListModel::setData() methods to support other roles.

示例:

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; };

更多推荐

如何更改QStringListModel项目的颜色?

本文发布于:2023-11-27 21:54:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1639737.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何更改   颜色   项目   QStringListModel

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!