qt c++ QListView 设置一行一个颜色
时间: 2024-01-11 08:05:21 浏览: 247
您可以通过重写 QStyledItemDelegate 的 paint 函数来实现为每一行设置不同的背景颜色。以下是一个简单的示例代码:
```cpp
#include <QApplication>
#include <QListView>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QStyledItemDelegate>
#include <QPainter>
#include <QBrush>
class ColoredDelegate : public QStyledItemDelegate
{
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
painter->save();
// 每隔一行设置一种颜色
if (index.row() % 2 == 0)
{
painter->fillRect(option.rect, QBrush(Qt::yellow));
}
else
{
painter->fillRect(option.rect, QBrush(Qt::green));
}
QStyledItemDelegate::paint(painter, option, index);
painter->restore();
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QStandardItemModel model(10, 1);
for (int row = 0; row < 10; ++row)
{
QStandardItem *item = new QStandardItem(QString("Item %1").arg(row));
model.setItem(row, 0, item);
}
QListView list_view;
list_view.setModel(&model);
list_view.setItemDelegate(new ColoredDelegate);
list_view.setGeometry(100, 100, 200, 200);
list_view.show();
return app.exec();
}
```
在这个示例中,我们重写了 QStyledItemDelegate 的 paint 函数,根据每行的奇偶性设置不同的背景颜色。然后将这个自定义的委托设置给 QListView,即可实现为每行设置不同颜色的效果。
阅读全文