Qt QTreeView简单使用

这篇具有很好参考价值的文章主要介绍了Qt QTreeView简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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<QStandardItem*> 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<QStandardItem*> imgList;
imgList.append(new QStandardItem("img1"));
imgList.append(new QStandardItem("img2"));
imgList.append(new QStandardItem("img3"));
itemImg->appendRows(imgList);

显示如下:

qt treeview添加节点,ui,qt,开发语言

三、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获取当前item
    if(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("删除");

最终效果

qt treeview添加节点,ui,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-779798.html

五、完整代码

QtDemos.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtDemos.h"
#include <QStandardItemModel>
#include <QMenu>

class QtDemos : public QMainWindow
{
    Q_OBJECT

public:
    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<QStandardItem*> 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<QStandardItem*> 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));
}

到了这里,关于Qt QTreeView简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT中treeWidget组件动态添加节点,删除节点,

    QT中treeWidget组件动态添加节点,删除节点, 2.1QT 5.14.1 新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。 QT编译器采用的是MSVC2017 64bit。 链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234 2.3 Visual studio 20

    2024年02月05日
    浏览(30)
  • Qt QTreeView 详解

    1.设置表头隐藏,设置表头 2.添加节点 这里添加两组数据 显示如下  3.节点可以带数据、图标、flag等 4.设置节点带checkBox 5.设置默认选中第几行 这里简单打印一下节点的名称 https://download.csdn.net/download/wzz953200463/85014146

    2024年02月16日
    浏览(25)
  • Qt中多ui使用及简单布局实现交互界面

    第一章 Qt中C++代码搭配UI文件实现交互界面 第二章 Qt中多ui使用及简单布局实现交互界面 文章目录 前言 一、新增两个新UI文件 二、使用这两个新增的UI及简单布局 三.添加简单联动逻辑 四.编译运行及动态效果展示 总结         前一段时间,写了一篇关于Qt中C++代码搭配

    2024年02月04日
    浏览(43)
  • Qt教程 — 2.1 如何使用Qt Designer 开发UI程序

    目录 1 Qt Designer简介 2 编辑UI界面 2.1 在 UI 界面添加一个Label 2.2 在 UI 界面添加一个按钮 2.3 在 UI 文件里连接信号与槽 方法一:通过信号和槽编辑栏 方法二:通过导航区信号和槽编按钮 方法三:通过跳转编辑代码实现—通过按钮输出文字 Qt Designer 是属于 Qt Creator 的一个功能

    2024年03月22日
    浏览(43)
  • QT Designer 生成的ui文件转化成py文件以及简单使用

    首先用QTdesigner 设计你的界面 然后保存成.ui文件 这一步大家应该都可以做到,就不细讲了 然后就是转换步骤 使用cmd进入ui所在目录 或者在pycharm项目里的终端进入ui所在目录 然后输入下列语句 这里的outputUI就可以替换成你想要的输出文件名 InputUI就是你想要转换的ui文件名 稍

    2023年04月08日
    浏览(40)
  • Python Qt学习(八)Treeview

    源代码: 截图:

    2024年02月09日
    浏览(36)
  • 【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片

    1、Qt Creator快速入门_第三版__霍亚飞编著 2、《Qt+OpenCV显示图片(Mat转QImage然后显示在QLabel上)》 https://gitee.com/hiyanyx/qt5.14-cpp_-empty_-project/tree/Study2023-section5/ git分支“Study2023-section5” 新增ui类 新增使用opencv读取图片的普通类 为了更加方便,可在QT 中添加普通类,这样会自动生

    2024年02月07日
    浏览(33)
  • Qt Visual Studio添加Qt ui和编译注意事项

    工程中需要新的界面 VS中新建Qt的ui文件,然后需要生成对应的.cpp 和 .h 文件 生成对应的三个文件.ui, xxx. cpp, xxx.h 但是此时在QtWidgetsTestClass.h 里面,包含了#include “ui_QtWidgetsTestClass.h”。 会提示找不到该文件。该文件的生成,需要使用到Qt的uic.exe程序 1.通过配置ui_QtWidgetsTest

    2024年02月02日
    浏览(53)
  • PyQt6 使用Qt Designer实现简单的界面,以及ui文件转py文件

    前言,主要通过参考并总结两篇文章中的部分内容,参考文章一 参考文章二 新增一个用户注册界面,包含用户名,密码,性别,手机号,点击注册按钮时,弹出一个对话框,提示恭喜 “{用户输入的用户名}” 注册成功。但是无奈还没找出获取最新输入用户名的值,就简单做

    2024年02月04日
    浏览(38)
  • 【Qt】使用Qt designer(Qt设计师)以及uic工具将ui文件转换到C++代码进行界面开发

    【Qt】编写第一个Qt程序,使用Cmake编译并运行 Qt Designer是一个用于创建Qt应用程序用户界面的图形化界面设计器。它是Python GUI开发的一个重要工具,可以帮助用户快速创建具有丰富功能的用户界面。 打开终端输入以下代码 点击创建 拖一些组件进来,点击保存 得到一个后缀为

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包