树形控件中的子项点击显示按钮弹窗

效果

在这里插入图片描述

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"QStandardItemModel"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
private slots:
    // QTreeView鼠标左键选中子节点事件响应槽函数
    void _on_m_treeView_current_changed(const QModelIndex& current, const QModelIndex& previous);
    void _on_m_treeView_MenuPopup(const QPoint &pos);

};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    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, &MainWindow::_on_m_treeView_current_changed);
    connect(ui->m_treeView, &QTreeView::customContextMenuRequested, this, &MainWindow::_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 MainWindow::_on_m_treeView_current_changed(const QModelIndex& current, const QModelIndex& previous)
{
    // 你的操作 ...
    QModelIndex index = current.sibling(current.row(), 0); //子节点只有一行的情况下
}

void MainWindow::_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));
}

//void MainWindow::_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));
//}

MainWindow::~MainWindow()
{
    delete ui;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/322732.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习怎么能从复杂的开始?,开始学一个个人博客吧

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…

(一)环境部署

Python虚拟环境 安装virtualenv pip install virtualenv 创建环境 virtualenv -p D:\python\python.exe(python解释器目录) env-py3.6(虚拟环境目录&#xff0c;名称随意) 在当前目录下生成env-py3.6目录。 激活环境 ...\env-py3.6\Scripts> .\activate 关闭&#xf…

mybatis中的驼峰转换

一、有啥用 开发时常用对象来存储从数据库中的记录&#xff0c;开启驼峰转化即可实现数据库字段(通常使用_下划线连接)与对象属性的对应&#xff0c;如数据库中的first_name字段会转化为firstName与对象中的firstName属性对应。 二、配置 三、相关报错 数据库字段与对象属性…

通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory

如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象&#xff0c;向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多&#xff0c;我们就需要new很多新的对象。这…

艾瑞报告:HR数字化需关注体系化能力,红海云等标杆厂商引领一体化趋势

新全球化时代背景下&#xff0c;企业经营所面临的国内外环境的不确定性增强&#xff0c;如何从不确定性中找到确定性成了大多数企业的关注要点。近日&#xff0c;艾瑞咨询发布《2023中国人力资源数字化研究报告》&#xff0c;从数字化转型的角度切入&#xff0c;探讨数字化如何…

电池包的UL9540A,电池PACK的UL9540A,工商储的UL9540A,电芯的UL9540A,电池模组的UL9540A,家储的UL9540A

电池包的UL9540A,电池PACK的UL9540A,工商储的UL9540A&#xff0c;电芯的UL9540A&#xff0c;电池模组的UL9540A,家储的UL9540A UL9540A要求ESS在不同条件下进行测试&#xff0c;并要求满足特定的性能要求。测试包括热暴露测试、短路测试、过充电和过放电测试、外部影响测试等。…

[论文阅读]DeepFusion

DeepFusion Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection 用于多模态 3D 物体检测的激光雷达相机深度融合 论文网址&#xff1a;DeepFusion 论文代码&#xff1a;DeepFusion 摘要 激光雷达和摄像头是关键传感器&#xff0c;可为自动驾驶中的 3D 检测提供补…

ssh远程访问及控制

目录 一、ssh协议简介 1、实现远程访问的协议和程序 2、ssh协议的概念及功能 3、ssh协议的工作原理 3.1 对称加密与非对称加密 3.1.1 对称加密&#xff08;Symmetric Encryption&#xff09; 3.1.2 非对称加密&#xff08;Asymmetric Encryption&#xff09; 3.2 公钥传…

生物信息学导论-北大-马尔可夫模型

ref: https://www.coursera.org/learn/sheng-wu-xin-xi-xue/home 本文主要来自本课的讲义。 Markov Model markov链描述了一个在连续时间段的离散随机过程&#xff0c;其中从一个状态向其他状态&#xff08;包括自身&#xff09;的转换&#xff0c;是由一个概率分布&#xff…

RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

LED 显示屏租赁特点及发展趋势大分析

LED租赁屏&#xff08;LED screen rental)作为一款专门用于舞台演出&#xff0c;文艺活动现场的LED显示屏&#xff0c;正逐渐成为户外广告传媒载体的首选。它广泛应用于舞台租赁、歌舞活动晚会、各种发布会、展会、体育场、剧场、礼堂、报告厅、多功能厅、会议室、演绎厅、迪吧…

JavaScript 入门手册

准备好快速学习 JavaScript了吗&#xff1f; 如果是&#xff0c;那么你需要这份 JavaScript 小抄。它以清晰、简洁和初学者友好的方式介绍了 JavaScript 的基础知识。 将它作为提高 JavaScript 技能的参考或指南。 让我们深入学习。 什么是 JavaScript&#xff1f; JavaSc…

【开源】基于JAVA的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

如何本地搭建WebDAV并结合cpolar制作可公网访问的个人私有云盘

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…

高性能、低功耗4口全速 USB1.1 HUB控制器DPU54 替代AU9254

DPU54是一款高性能、低功耗 4 口全速 USB1.1HUB 控制器&#xff0c;上行端口兼容全速 12MHz 模式&#xff0c;4 个下行端口兼容全速 12MHz、低速 1.5MHz 两种模式。 DPU54采用状态机单事务处理架构&#xff0c;而非单片机架构&#xff0c;多个事务缓冲区&#xff0c;这样减小了…

【蓝桥杯软件赛 零基础备赛20周】第8周——排序算法及应用

文章目录 1. 快速排序2. C STL sort()3. Python的sort()和sorted()4. Java的sort()5. 例题例1 排序的基本应用例2 排序的基本应用例3 自定义排序比较函数例4 结构体排序例5 结构体排序 6. 习题 在算法竞赛中&#xff0c;一般不需要自己写这些排序算法&#xff0c;而是直接使用库…

任务10:安装配置Java开发环境

任务描述 知识点&#xff1a; Java开发工具Maven配置 重 点&#xff1a; 安装配置Java开发工具 IDEA为IDEA配置自定义Maven&#xff08;国内源&#xff09; 内 容&#xff1a; 下载并配置JDK 1.8下载安装IDEA为IDEA配置自定义MavenWindows环境安装配置Hadoop 任务指导…

【电商API】商品采集快速上货的通道

从技术上讲&#xff0c;API是应用程序编程接口的首字母缩写&#xff0c;被认为是构建应用软件的一组协议。实际上&#xff0c;API 是让人们保持数字联系的大部分基础。 API 开发正在为正确利用它们的网站开辟新的途径——在某些情况下&#xff0c;还开辟了新的收入来源。他们正…

国外客户工厂还是贸易商,该怎么回答

在和客户沟通的时候&#xff0c;我们最常遇到也最头疼的问题就是客户询问我们是工厂还是贸易商的时候&#xff0c;我们该怎么回答呢&#xff1f;万一回答错误了客户不搭理我们了应该怎么办呢&#xff1f; 先来看看我们常用的回答方式&#xff0c;是不是有你常用的&#xff1f;…

《YOLO算法:基础+进阶+改进》报错解决 专栏答疑

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。《YOLO算法&#xff1a;基础进阶改进》专栏上线后&#xff0c;部分同学在学习过程中提出了一些问题&#xff0c;笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容&#xff0c;笔者特意推出了该篇…