QItemDelegate QItemDelegate QItemDelegate

qtreeview点击某一行有颜色显示 c++

在Qt中,要实现QTreeView点击某行有颜色显示,可以通过设置QTreeViewitemDelegate来自定义显示样式。以下是一个简单的例子,演示如何为QTreeView的项设置点击时的背景颜色。

 
 

#include <QApplication>

#include <QTreeView>

#include <QStandardItemModel>

#include <QItemDelegate>

#include <QPainter>

class HighlightDelegate : public QItemDelegate {

public:

HighlightDelegate(QTreeView *view, QColor color)

: QItemDelegate(), treeView(view), highlightColor(color) {}

protected:

void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override {

if (option.state.testFlag(QStyle::State_Selected)) {

QStyleOptionViewItem opt(option);

opt.palette.setColor(QPalette::Highlight, highlightColor);

opt.palette.setColor(QPalette::HighlightedText, Qt::white);

QItemDelegate::paint(painter, opt, index);

} else {

QItemDelegate::paint(painter, option, index);

}

}

private:

QTreeView *treeView;

QColor highlightColor;

};

int main(int argc, char *argv[]) {

QApplication app(argc, argv);

QTreeView treeView;

QStandardItemModel model;

// 填充模型数据

for (int i = 0; i < 5; ++i) {

QStandardItem *item = new QStandardItem("Item " + QString::number(i));

model.appendRow(item);

}

treeView.setModel(&model);

// 设置自定义代理,并指定高亮颜色

HighlightDelegate *delegate = new HighlightDelegate(&treeView, Qt::blue);

treeView.setItemDelegate(delegate);

treeView.show();

return app.exec();

}

在这个例子中,HighlightDelegate类继承自QItemDelegate并重写了paint方法。当项被选中时,它会使用指定的颜色(highlightColor)绘制背景。这样,当你点击QTreeView中的任何一行时,它将会被高亮显示。

你需要将上述代码编译并运行,就能看到效果。记得在你的项目中链接Qt GUI模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值