QItemDelegate QItemDelegate QItemDelegate
qtreeview点击某一行有颜色显示 c++
在Qt中,要实现QTreeView
点击某行有颜色显示,可以通过设置QTreeView
的itemDelegate
来自定义显示样式。以下是一个简单的例子,演示如何为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模块。