Qt treewidget右键添加菜单,删除节点

1、添加connect连接,实现信号与槽函数的连接,具体如下:

ui.treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);   //使得该控件可以支持右键菜单

connect(ui.treeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
		this, SLOT(SlotCustomContextMenuRequested(const QPoint&)));//实现右击添加菜单的信号与槽的连接

2、实现槽函数--SlotCustomContextMenuRequested(const QPoint&),具体如下:

void Test_9::SlotCustomContextMenuRequested(const QPoint& pos)
{
	m_pact = new QAction(QStringLiteral("删除"), this);
	//QAction *pDelAction_1 = new QAction(QStringLiteral("重命名"), this);
	QMenu *popMenu = new QMenu(this);//定义右键弹出菜单
	popMenu->addAction(m_pact);//往菜单内添加QAction 
	// QAction *deleAction = cmenu->addAction("Delete");//另一种创建方式
	connect(m_pact, SIGNAL(triggered()), this, SLOT(DeleteItemFunction()));
	popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
}

3、实现单击删除节点槽函数--DeleteItemFunction(),具体如下:

void Test_9::DeleteItemFunction()
{
	QTreeWidgetItem * currentItem = ui.treeWidget->currentItem();//获取当前节点
	if (currentItem == NULL)
	{
		return;
	}
	else
		delete currentItem;
}

4、实现结果

                 

 5、完整代码如下:

(1)Test_9.cpp文件完整内容如下:

#include "Test_9.h"

Test_9::Test_9(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	ui.treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);   //使得该控件可以支持右键菜单

	connect(ui.treeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
		this, SLOT(SlotCustomContextMenuRequested(const QPoint&)));
	
	ui.treeWidget->setStyle(QStyleFactory::create("windows"));  //设置虚线和伸缩加减号
	ui.treeWidget->clear();    //QTreeWidget清空
	ui.treeWidget->setHeaderLabels(QStringList() << QStringLiteral("名称") << QStringLiteral("编号"));
	ui.treeWidget->setColumnCount(2); //tree widget的列数

	 //顶层节点设计
	QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList() << QStringLiteral("项目"));
	ui.treeWidget->addTopLevelItem(liItem);

	//子节点的设置
	QTreeWidgetItem * li1 = new QTreeWidgetItem(QStringList() << QStringLiteral("参数"));
	liItem->addChild(li1);
	QTreeWidgetItem * li2 = new QTreeWidgetItem(QStringList() << QStringLiteral("几何"));
	liItem->addChild(li2);
	QTreeWidgetItem * li3 = new QTreeWidgetItem(QStringList() << QStringLiteral("网络"));
	liItem->addChild(li3);
	QTreeWidgetItem * li4 = new QTreeWidgetItem(QStringList() << QStringLiteral("集合"));
	liItem->addChild(li4);
	QTreeWidgetItem * li5 = new QTreeWidgetItem(QStringList() << QStringLiteral("材料"));
	liItem->addChild(li5);
	QTreeWidgetItem * li6 = new QTreeWidgetItem(QStringList() << QStringLiteral("属性"));
	liItem->addChild(li6);
	QTreeWidgetItem * li7 = new QTreeWidgetItem(QStringList() << QStringLiteral("载荷"));
	liItem->addChild(li7);

	li8 = new QTreeWidgetItem(QStringList() << QStringLiteral("约束"));
	liItem->addChild(li8);
	QTreeWidgetItem * li11 = new QTreeWidgetItem(QStringList() << QStringLiteral("小白"));
	li8->addChild(li11);

	QTreeWidgetItem * li9 = new QTreeWidgetItem(QStringList() << QStringLiteral("求解"));
	liItem->addChild(li9);
	QTreeWidgetItem * li10 = new QTreeWidgetItem(QStringList() << QStringLiteral("结果"));
	liItem->addChild(li10);
}

void Test_9::SlotCustomContextMenuRequested(const QPoint& pos)
{
	m_pact = new QAction(QStringLiteral("删除"), this);
	//QAction *pDelAction_1 = new QAction(QStringLiteral("重命名"), this);
	QMenu *popMenu = new QMenu(this);//定义右键弹出菜单
	popMenu->addAction(m_pact);//往菜单内添加QAction 
	// QAction *deleAction = cmenu->addAction("Delete");//另一种创建方式
	connect(m_pact, SIGNAL(triggered()), this, SLOT(DeleteItemFunction()));
	popMenu->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
}

void Test_9::DeleteItemFunction()
{
	QTreeWidgetItem * currentItem = ui.treeWidget->currentItem();//获取当前节点
	if (currentItem == NULL)
	{
		return;
	}
	else
		delete currentItem;
}

(2)Test_9.h完整内容如下:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_Test_9.h"

#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QMessageBox>
#include <QDebug>
#include <QStyleFactory>

#include<QAction.h>
#include<QMenu.h>

class Test_9 : public QMainWindow
{
	Q_OBJECT

public:
	Test_9(QWidget *parent = Q_NULLPTR);

private:
	Ui::Test_9Class ui;
	QTreeWidgetItem *li8;
	QAction *m_pact;

	private slots:
	void SlotCustomContextMenuRequested(const QPoint&);
	void DeleteItemFunction();
};

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值