Qt QTreeView简单使用
创始人
2024-05-29 22:37:21
0

QT-QTreeView使用方法

QTreeView: 用于显示树状结构数据,适用于树状结构数据的操作。

一、初始化

​ 利用QStandardlternModel来初始化数据,标准的基于项数据的数据模型类, 每个项数据可以是任何数据类型。

// 初始化model
QStandardItemModel* m_standardItemModel = new QStandardItemModel();// 使用model设置QTreeView表头
m_standardItemModel->setHorizontalHeaderLabels(QStringList(QStringLiteral("资源"))); // TreeView控件载入model
ui.m_treeView->setModel(m_standardItemModel);// 展开数据
ui.m_treeView->expandAll();

二、节点添加数据

​ 利用QStandardItem创建根节点与子节点的Item,并向内填充数据。数据类型可以为QString等字符,也可以是常规的变量类型。

// 创建根节点,抽象Item,并没有实际数据
QStandardItem* itemRoot = m_standardItemModel->invisibleRootItem();// 创建并添加Item的第一个子节点
QStandardItem* itemCam = new QStandardItem(QStringLiteral("相机"));
itemRoot->appendRow(itemCam);// 向第一个子节点itemCam添加子节点数据
QList camList;
camList.append(new QStandardItem("cam1"));
camList.append(new QStandardItem("cam2"));
camList.append(new QStandardItem("cam3"));
itemCam->appendRows(camList);// 创建并添加Item的第二个子节点
QStandardItem* itemImg = new QStandardItem(QStringLiteral("图片"));
itemRoot->appendRow(itemImg);// 向第二个子节点itemImg添加子节点数据
QList imgList;
imgList.append(new QStandardItem("img1"));
imgList.append(new QStandardItem("img2"));
imgList.append(new QStandardItem("img3"));
itemImg->appendRows(imgList);

显示如下:

三、QTreeView节点鼠标点击事件

1.1 鼠标单击事件响应类型

1、当我们将鼠标停靠在指定节点内并点击时,我们需要触发鼠标选中的item发生变化,此时会有QModelInex发生变化。

相关参数详解:

参数

功能

QModelIndex&

返回item的row(), colmun()以及父节点

m_treeViewz->selectionModel()

选中当前鼠标单击的TreeView的model item项

&QitemModel::currentChanged

鼠标选择item事件响应

&QItemSelectionModel::currentChanged

跟踪视图中的选定项

代码如下:

// 鼠标左键单击槽函数
void _on_image_tree_currentChanged(const QModelIndex& current, const QModelIndex& previous); // 槽函数连接
connect(ui.m_treeView->selectionModel(), &QitemModel::currentChanged, this, &on_image_tree_currentChanged);// 槽函数
QtDemos::on_image_tree_currentChanged()
{// 你的操作:// 从索引index里面获得item指针,model是tree的数据model,这里item数据类型为QStandradItemModel*QModelIndex index = current.sibling(current.row(), 0);          // 获取当前item的子节点index note:子节点只有一行的情况下QStandardItem* item = mTreeViewModel->itemFromIndex(index);     // 根据index获取当前itemif(item){// 处理代码// int indexCurrentItem = index.row() 	// 获取item的行号// QString text = item->text(); 		// 获取item的文本// m_standardItemModel->itemFromIndex(index)->text() // 通过index获取item文本}
}

四、其他操作

1、节点设置checkBox

itemCam->setCheckable(true);
itemImg->setCheckable(true);

2、节点添加图标

【note】:只能添加png, jpg等格式文件,无法添加.ico图标文件

itemCam->setIcon(QIcon("C:/Users/admin/Desktop/Alexnet_Structure.png"));

3、节点不可编辑

ui->m_treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);

完整代码:

4、右键菜单

//打开右键菜单属性
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);//右键菜单
menu = new QMenu(ui->treeView);
menu->addAction("添加");
menu->addAction("删除");

最终效果

五、完整代码

QtDemos.h

#pragma once#include 
#include "ui_QtDemos.h"
#include 
#include class QtDemos : public QMainWindow
{Q_OBJECTpublic:QtDemos(QWidget *parent = Q_NULLPTR);private:Ui::QtDemosClass ui;private slots:// QTreeView鼠标左键选中子节点事件响应槽函数void _on_m_treeView_current_changed(const QModelIndex& current, const QModelIndex& previous);void _on_m_treeView_MenuPopup(const QPoint &pos);
};

QtDemos.cpp

#include "QtDemos.h"
QtDemos::QtDemos(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);// 1.初始化model
QStandardItemModel* m_standardItemModel = new QStandardItemModel();// 2.使用model设置QTreeView表头
m_standardItemModel->setHorizontalHeaderLabels(QStringList(QStringLiteral("资源"))); // 3.创建根节点,抽象Item,并没有实际数据
QStandardItem* itemRoot = m_standardItemModel->invisibleRootItem();// 4.创建并添加Item的第一个子节点
QStandardItem* itemCam = new QStandardItem(QStringLiteral("相机"));
itemRoot->appendRow(itemCam);// 5.向第一个子节点itemCam添加子节点数据
QList camList;
camList.append(new QStandardItem("cam1"));
camList.append(new QStandardItem("cam2"));
camList.append(new QStandardItem("cam3"));
itemCam->appendRows(camList);// 6.创建并添加Item的第二个子节点
QStandardItem* itemImg = new QStandardItem(QStringLiteral("图片"));
itemRoot->appendRow(itemImg);// 7.向第二个子节点itemImg添加子节点数据
QList imgList;
imgList.append(new QStandardItem("img1"));
imgList.append(new QStandardItem("img2"));
imgList.append(new QStandardItem("img3"));
itemImg->appendRows(imgList);// 8.TreeView控件载入model
ui.m_treeView->setModel(m_standardItemModel);// 9.展开数据
ui.m_treeView->expandAll();// 槽函数
connect(ui.m_treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &QtDemos::_on_m_treeView_current_changed);
connect(ui.m_treeView, &QTreeView::customContextMenuRequested, this, &QtDemos::_on_m_treeView_MenuPopup);// 其他操作// 节点设置checkBox
itemCam->setCheckable(true);
itemImg->setCheckable(true);// 节点设置图标
itemCam->setIcon(QIcon("C:/Users/admin/Desktop/Alexnet_Structure.png"));// 只能添加png, jpg等格式文件,无法添加.ico图标文件// 节点不可编辑
ui.m_treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);// 右键菜单
ui.m_treeView->setContextMenuPolicy(Qt::CustomContextMenu);
}void QtDemos::_on_m_treeView_current_changed(const QModelIndex& current, const QModelIndex& previous)
{// 你的操作 ...QModelIndex index = current.sibling(current.row(), 0); //子节点只有一行的情况下
}void QtDemos::_on_m_treeView_MenuPopup(const QPoint& pos)
{QMenu* menu = new QMenu(ui.m_treeView);menu->addAction(QStringLiteral("添加"));menu->addAction(QStringLiteral("删除"));
menu->exec(ui.m_treeView->mapToGlobal(pos));
}

相关内容

热门资讯

元宵节的对联经典版 关于元宵节的对联【经典版】  在当今社会生活中,许多人对一些广为流传的对联都不陌生吧,对联是在古代的...
六一儿童节的作文200字 六一儿童节的作文200字集锦九篇  在学习、工作或生活中,大家都跟作文打过交道吧,通过作文可以把我们...
微笑,让世界更美好作文 微笑,让世界更美好作文(通用22篇)  在日常学习、工作抑或是生活中,大家都经常看到作文的身影吧,借...
欢庆六一儿童节作文 欢庆六一儿童节作文欢庆“六一”儿童节敬爱的老师,亲爱的同学:大家好!今天我们相聚一堂,欢庆“六一”儿...
狐假虎威续写200字作文 狐假虎威续写200字作文  小动物们都很纳闷,所以它们在灌木丛中开了一场会,大家都觉得小猴最聪明,机...
勤俭节约的议论文论据素材 关于勤俭节约的议论文论据素材  导语:勤俭节约也是中国的传统美德, 我们应该向那些勤俭朴素的人学习,...
一件印象深刻的事作文 一件印象深刻的事作文400字(通用20篇)  在平日的学习、工作和生活里,大家都经常接触到作文吧,借...
假如没有太阳想象作文 假如没有太阳想象作文  在学习、工作或生活中,许多人都有过写作文的经历,对作文都不陌生吧,作文是人们...
母亲节贺卡内容 母亲节贺卡内容  母亲节(MothersDay),是一个感谢母亲的节日。母亲们在这一天通常会收到礼物...
清明节的作文 关于清明节的作文合集14篇  在学习、工作乃至生活中,大家都经常看到作文的身影吧,作文根据写作时限的...
清明节作文 关于清明节作文范文(精选20篇)  在学习、工作乃至生活中,大家都不可避免地要接触到作文吧,借助作文...
小细节作文 小细节作文16篇  无论是身处学校还是步入社会,许多人都写过作文吧,借助作文人们可以反映客观事物、表...
在告别中成长作文600字 在告别中成长作文600字(精选20篇)  在平日的学习、工作和生活里,大家对作文都再熟悉不过了吧,借...
感恩节的作文1000字 【热门】感恩节的作文1000字4篇  在学习、工作乃至生活中,说到作文,大家肯定都不陌生吧,作文根据...
我快乐的暑假生活 我快乐的暑假生活我快乐的暑假生活正文:我快乐的暑假生活快乐的暑假终于到了,我可以开开心心痛痛快快地玩...
游周庄 游周庄游周庄1  周庄游今年过年,我们一家三口带着外婆一块儿到周庄古镇游玩。这次是爸爸来当司机,经过...
圆梦中国作文 圆梦中国作文(精选23篇)  在平平淡淡的学习、工作、生活中,大家都有写作文的经历,对作文很是熟悉吧...
母亲节的名言警句 母亲节的名言警句  母亲节这一天,是一个感谢母亲的节日,而在世界各地的母亲节的日期也会有所不同。以下...
嗜血狼王作文1200字 嗜血狼王作文1200字  在日常学习、工作抑或是生活中,大家总少不了接触作文吧,借助作文可以宣泄心中...
捉蜥拾趣叙事作文 捉蜥拾趣叙事作文  春节期间,爸爸和小叔带着我和弟弟到龙凤岩游玩。一路上,爸爸和叔叔边欣赏风景边拍照...