右击 QTreeWidgetItem,弹出选择菜单

2023-11-01 08:10

本文主要是介绍右击 QTreeWidgetItem,弹出选择菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

先看效果:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTreeWidget>
#include <QMenu>
#include <QAction>
#include <QVBoxLayout>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE/* 注册自己的结构体 */
struct userData_t
{QString  sz_name;QString  sz_address;userData_t(QString n, QString addr);userData_t();
};
Q_DECLARE_METATYPE(userData_t);class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:void  updateView(std::vector<userData_t> &showData);private slots://响应右击void  userClicked(QPoint pos);private:Ui::MainWindow *ui;QTreeWidget *m_tree;};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"userData_t::userData_t(QString n, QString addr) : sz_name(n), sz_address(addr)
{qRegisterMetaType<userData_t>("userData_t");
}userData_t::userData_t() : sz_name("NA"), sz_address("NA")
{qRegisterMetaType<userData_t>("userData_t");
}MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);m_tree = new QTreeWidget();m_tree->setColumnCount(1);m_tree->setHeaderLabel("--demo---");m_tree->setContextMenuPolicy(Qt::CustomContextMenu);connect(m_tree, &QTreeWidget::customContextMenuRequested,this,&MainWindow::userClicked);QVBoxLayout *lay = new QVBoxLayout();lay->addWidget(m_tree);lay->setMargin(0);lay->setSpacing(0);ui->groupBox->setLayout(lay);#if 1//测试用做一个假数据std::vector<userData_t> tVec;tVec.push_back(userData_t("月读", "00110010"));tVec.push_back(userData_t("天照", "00110011"));tVec.push_back(userData_t("地爆天星", "00111010"));tVec.push_back(userData_t("神罗天征", "10111010"));tVec.push_back(userData_t("葵花宝典", "10111010"));updateView(tVec);
#endif
}MainWindow::~MainWindow()
{delete ui;
}响应右击 /
void MainWindow::userClicked(QPoint pos)
{QTreeWidgetItem* curItem= m_tree->itemAt(pos);if(curItem==NULL) return;QVariantMap varMap = curItem->data(0,Qt::UserRole).toMap();userData_t ret = varMap["DATA"].value<userData_t>(); //获取数据QAction *placeAct = new QAction("开始学习");connect(placeAct, &QAction::triggered, this, [&](){qDebug() << QString("【技能:%1】 ----  【 ID:%2】").arg(ret.sz_name).arg(ret.sz_address);});QAction *deleteAct = new QAction("下次再说");connect(deleteAct, &QAction::triggered, this, [&](){qDebug() << "算了";});QMenu menu(this);menu.addAction(placeAct);menu.addAction(deleteAct);menu.exec( m_tree->mapToGlobal(pos) );
}更新视图 /
void MainWindow::updateView(std::vector<userData_t> &showData)
{m_tree->clear();m_tree->setColumnCount(1);QTreeWidgetItem *firstTreeItem = new QTreeWidgetItem();m_tree->addTopLevelItem(firstTreeItem);firstTreeItem->setText(0, "0.0");firstTreeItem->setBackgroundColor(0, QColor::fromRgb(222,236,252));for (size_t i = 0; i < showData.size(); i++){QTreeWidgetItem *blkChild = new QTreeWidgetItem();blkChild->setText(0, showData[i].sz_name);//设置userDataQVariantMap data;data["DATA"] = QVariant::fromValue<userData_t>(showData[i]);blkChild->setData(0, Qt::UserRole, data);blkChild->setBackgroundColor(0, QColor::fromRgb(255,255,240));firstTreeItem->addChild(blkChild);}m_tree->expandAll();
}

 

这篇关于右击 QTreeWidgetItem,弹出选择菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321665

相关文章

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

为什么现在很多人愿意选择做债务重组?债重组真的就这么好吗?

债务重组,起初作为面向优质企业客户的定制化大额融资策略,以其高效周期著称,一个月便显成效。然而,随着时代的车轮滚滚向前,它已悄然转变为负债累累、深陷网贷泥潭者的救赎之道。在此路径下,个人可先借助专业机构暂代月供,经一段时间养护征信之后,转向银行获取低成本贷款,用以替换高昂网贷,实现利息减负与成本优化的双重目标。 尽管债务重组的代价不菲,远超传统贷款成本,但其吸引力依旧强劲,背后逻辑深刻。其一

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符