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();
};