Qt设置右键菜单无效customContextMenuRequested(const QPoint pos)

本文主要是介绍Qt设置右键菜单无效customContextMenuRequested(const QPoint pos),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题代码:

void MainWindow::onCustomContextMenuRequested(const QPoint &pos)
{QTreeWidgetItem *item = ui->treeWidget->itemAt(pos);if (item){QMenu menu(ui->treeWidget);TreeNodeType nodeType = (TreeNodeType)item->data(0, Qt::UserRole + 1).toInt();if (nodeType == NODE_CONNECTION){QAction actionOpen("打开连接", ui->treeWidget);connect(&actionOpen, &QAction::triggered, this, &MainWindow::onOpenConnectionTriggered);menu.addAction(&actionOpen);QAction actionModify("编辑连接", ui->treeWidget);connect(&actionModify, &QAction::triggered, this, &MainWindow::onModifyConnectionTriggered);menu.addAction(&actionModify);}else if (nodeType == NODE_DATABASE){qDebug() << "NODE_DATABASE";QAction actionOpen("打开连接", ui->treeWidget);connect(&actionOpen, &QAction::triggered, this, &MainWindow::onOpenConnectionTriggered);menu.addAction(&actionOpen);}else if (nodeType == NODE_TABLE){qDebug() << "NODE_TABLE";QAction actionOpen("打开连接", ui->treeWidget);connect(&actionOpen, &QAction::triggered, this, &MainWindow::onOpenConnectionTriggered);menu.addAction(&actionOpen);}qDebug() << "why?";menu.exec(QCursor::pos());}
}

想着先声明QMenu然后根据右键的不同类型节点弹出不一样的菜单,结果这样一直无法显示菜单。调试发现代码是按照预想的逻辑走的,后面想起一种可能:QAction在if里面定义,离开if的时候,QAction对象已经被释放掉了。然后把代码改成下面这样:

void MainWindow::onCustomContextMenuRequested(const QPoint &pos)
{QTreeWidgetItem *item = ui->treeWidget->itemAt(pos);if (item){TreeNodeType nodeType = (TreeNodeType)item->data(0, Qt::UserRole + 1).toInt();if (nodeType == NODE_CONNECTION){QMenu menu(ui->treeWidget);QAction actionOpen("打开连接", ui->treeWidget);connect(&actionOpen, &QAction::triggered, this, &MainWindow::onOpenConnectionTriggered);menu.addAction(&actionOpen);QAction actionModify("编辑连接", ui->treeWidget);connect(&actionModify, &QAction::triggered, this, &MainWindow::onModifyConnectionTriggered);menu.addAction(&actionModify);menu.exec(QCursor::pos());}else if (nodeType == NODE_DATABASE){QMenu menu(ui->treeWidget);qDebug() << "NODE_DATABASE";QAction actionOpen("打开连接", ui->treeWidget);connect(&actionOpen, &QAction::triggered, this, &MainWindow::onOpenConnectionTriggered);menu.addAction(&actionOpen);menu.exec(QCursor::pos());}else if (nodeType == NODE_TABLE){QMenu menu(ui->treeWidget);qDebug() << "NODE_TABLE";QAction actionOpen("打开连接", ui->treeWidget);connect(&actionOpen, &QAction::triggered, this, &MainWindow::onOpenConnectionTriggered);menu.addAction(&actionOpen);menu.exec(QCursor::pos());}}
}

再次运行,果然没问题了,又学到了。

这篇关于Qt设置右键菜单无效customContextMenuRequested(const QPoint pos)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

Windows如何添加右键新建菜单

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

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Tomcat性能参数设置

转自:http://blog.csdn.net/chinadeng/article/details/6591542 Tomcat性能参数设置 2010 - 12 - 27 Tomcat性能参数设置 博客分类: Java Linux Tomcat 网络应用 多线程 Socket 默认参数不适合生产环境使用,因此需要修改一些参数   1、修改启动时内存参数、并指定J

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数