Qtreeview,点击项和下面一项背景变红,c++完整代码
时间: 2023-12-31 14:04:40 浏览: 132
以下是使用 Qt 编写的 QTreeView 点击项和下面一项背景变红的完整示例代码:
mainwindow.h 文件:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStandardItemModel>
#include <QTreeView>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QStandardItemModel *m_model; // 标准模型
QTreeView *m_treeView; // 树形视图
private slots:
void on_treeView_clicked(const QModelIndex &index); // 点击项的槽函数
};
#endif // MAINWINDOW_H
```
mainwindow.cpp 文件:
```cpp
#include "mainwindow.h"
#include <QStandardItem>
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 创建标准模型
m_model = new QStandardItemModel(this);
// 添加根节点
QStandardItem *rootItem = m_model->invisibleRootItem();
// 添加子节点
for (int i = 1; i <= 10; i++) {
QStandardItem *item = new QStandardItem(QString("Item %1").arg(i));
rootItem->appendRow(item);
}
// 创建树形视图
m_treeView = new QTreeView(this);
m_treeView->setModel(m_model);
m_treeView->setAlternatingRowColors(true); // 开启交替行颜色
m_treeView->setStyleSheet("QTreeView::item:selected:active { background-color: red; }"); // 选中项背景色为红色
m_treeView->setStyleSheet("QTreeView::item:!selected:hover { background-color: #e6f3ff; }"); // 鼠标悬停项背景色为浅蓝色
// 设置树形视图的列宽
m_treeView->setColumnWidth(0, 200);
// 创建主布局
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(m_treeView);
// 设置主窗口的中心部件
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(mainLayout);
setCentralWidget(centralWidget);
// 连接点击项的信号和槽函数
connect(m_treeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(on_treeView_clicked(const QModelIndex &)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
// 获取当前项
QStandardItem *currentItem = m_model->itemFromIndex(index);
// 获取下一项
QStandardItem *nextItem = m_model->itemFromIndex(index.sibling(index.row() + 1, index.column()));
// 设置当前项和下一项的背景色为红色
QBrush brush(Qt::red);
currentItem->setBackground(brush);
nextItem->setBackground(brush);
}
```
在上述代码中,我们创建了一个带有 QTreeView 的窗口,并使用 QStandardItemModel 作为数据模型。我们在模型中添加了 10 个子节点,并通过 setStyleSheet() 方法设置了选中项和鼠标悬停项的背景色。
在点击项的槽函数中,我们获取当前项和下一项,并将它们的背景色设置为红色。这样,当我们点击某个项时,该项和下面一项的背景色就会变成红色。
阅读全文