qt右键弹出菜单的一些实现方法

2023-10-27

在qt中,关于右键弹出菜单,有几种实现方法:

1-在窗口初始化时,修改指定控件的右键菜单策略,然后把右键点击信号和某个槽函数连接。

    //设置btnNew按钮的右键菜单策略
    ui->btnNew->setContextMenuPolicy(Qt::CustomContextMenu);
    //把btnNew按钮的右键点击信号和槽函数连接
    connect(ui->btnNew,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(on_btnNew_clicked()));

2-在窗口初始化时,给指定控件安装事件过滤器,然后重写窗口的eventFilter接口函数。

    //设置btnSave按钮的事件过滤器
    ui->btnSave->installEventFilter(this);
窗口头文件加入eventFilter接口函数的声明:
protected:
    bool eventFilter(QObject *watched, QEvent *event);

窗口实现文件eventFilter接口函数:

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    //检测btnSave按钮的右键菜单事件
    if (watched == ui->btnSave && event->type() == QEvent::ContextMenu)
    {
        QMenu * menu=new QMenu;
        QAction * saveaction=new QAction;
        saveaction->setText("保存按钮右键");
        menu->addAction(saveaction);
        menu->exec(QCursor::pos());
        return true;
    }
    //注意,最后要调用基类QObject的eventFilter接口,否则窗口无法响应
    return QObject::eventFilter(watched,event);
}

3-后面两种,跟上边一样,也是在窗口中重写派生保护函数contextMenuEvent和mousePressEvent。

窗口头文件加入这两个函数的声明:
protected:
    void contextMenuEvent(QContextMenuEvent *event);
    void mousePressEvent(QMouseEvent *event);

窗口实现文件:


//重写窗口contextMenuEvent函数实现label右键菜单
void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
    //把鼠标位置转化成相对于label的位置
    QPoint i = ui->labelSnapshot->mapFromGlobal(event->globalPos());
    //获取label的尺寸
    QRect rect(QPoint(0,0),ui->labelSnapshot->size());
    //然后判断鼠标位置是否在label内.
    if (rect.contains(i))
    {
        QMenu * menu=new QMenu;
        QAction * saveaction=new QAction;
        saveaction->setText("label另存");
        connect(saveaction,SIGNAL(triggered(bool)),this,SLOT(on_btnSave_clicked()));
        menu->addAction(saveaction);
        menu->exec(event->globalPos());
    }
}

//重写窗口mousePressEvent函数实现text右键菜单
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if(event->buttons()==Qt::RightButton)
    {
        //把鼠标位置转化成相对于text的位置
        QPoint i = ui->textEdit->mapFromGlobal(event->globalPos());
        //获取text的尺寸
        QRect rect(QPoint(0,0),ui->textEdit->size());
        //然后判断鼠标位置是否在text内.
        if (rect.contains(i))
        {
            QMenu * menu=new QMenu;
            QAction * saveaction=new QAction;
            saveaction->setText("text另存");
            connect(saveaction,SIGNAL(triggered(bool)),this,SLOT(on_btnSave_clicked()));
            menu->addAction(saveaction);
            menu->exec(event->globalPos());
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt右键弹出菜单的一些实现方法 的相关文章

  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • 如何在 OS X 上的 Qt 应用程序中设置应用程序图标,足以进行分发?

    跟进这个答案 https stackoverflow com a 20918932 368896 to 这个问题 https stackoverflow com questions 20909341 what is the fastest
  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • 完全彻底卸载QT Creator

    问题 如何从 Linux 机器上卸载 QT Creator 我的 Debian Jessie 机器上的安装已损坏 我尝试过重新安装 修复等 但没有成功 建议我完全卸载 获取最新版本并重新安装 问题是我不确定如何执行此操作 每次我尝试时 QT
  • 如何在Qt 5中的paintEvent上使用mouseMoveEvent?

    我是 Qt 和 c 的新手 所以我遇到了一些困难 我正在尝试创建一个小部件 它可以获取 mouseMoveEvent 位置并在鼠标位置的像素图上绘制椭圆 下面你可以看到代码 include myimage h include
  • QTableView 并双击一个单元格

    我正在开发测试用例编辑器 该编辑器包含 USART 传输和接收数据包格式 编辑器是一个表格视图 发送和接收数据包的长度为八个字节 例如 0x01 0x02 0x03 0x08 它在我的第五和第六栏中 现在 我希望此列中的单元格为只读 但是当
  • Qt中Q_PROPERTY的意义是什么?

    我无法理解 Q PROPERTY 的用法 Q PROPERTY 如何帮助程序具有防御性 它是干什么用的 我看过这个论坛 但确实无法应用 我已经理解了这个例子 但不明白它的用法 这是一个例子 我能从中得到什么 我知道阅读将赋予只读特权 wri
  • 针对初学者的 QT 商业许可证与非商业许可证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 QT 许可似乎非常反学习 因为据我所知 用它开发的任何东西都只能是商业的当且仅当 its entire开发是在使用商业许可证的情况下完成的
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 无法运行 Qt 应用程序:找不到版本“Qt_5”

    我运行 Ubuntu 16 04 LTS 我的问题是我无法运行可以编译的 Qt5 应用程序 这是我尝试运行它时得到的结果 home user Desktop sconfig dist Release GNU Linux SCongif us
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

    我正在尝试用 C Qt 制作一个带有这样的侧边栏的应用程序 但是当将 QTabWidget 方向设置为西时 它会使文本垂直 如何让文本位于左侧 但水平对齐 PS 我不需要图标 提前致谢 您可以使用QListWidget http doc q
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • QObject 通用信号处理程序

    信号处理程序 是指插槽 而不是 POSIX 信号的处理程序 我需要 连接 可能不会 using QObject connect直接地 所有信号从 QObject 的 未知 子类的实例到一个单槽另一个 QObject 的 我需要这个才能通过网
  • CMake AUTOMOC,文件位于不同文件夹中

    我有一个简单的 CMake 项目 proj project folder a h a cpp CMakeLists txt CMakeLists txt cmake minimum required VERSION 3 2 set CMAK
  • Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

    我只是好奇 比方说 我需要在控制台中输出一个数字 代码是 include
  • 使用 QWT 构建时出错

    我收到一个错误 undefined reference to QwtPlot QwtPlot QWidget 当我尝试构建我的项目时 即使设置中一切看起来都很好 在我的 CmakeLists txt 中我有 include director
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht

随机推荐

  • centos7 安装jdk1.8

    一 安装环境 虚拟机centos7 二 安装步骤 linux环境下软件的安装有两种类型 yum install 和wget gz 安装包的格式 建议不管安装什么软件方式 能用wget解压安装包安装就用这种方式安装 1 下载安装包 wget
  • BUUCTF【Web】Secret File

    知识点 文件包含漏洞 PHP伪协议 进入靶场后 发现是一个文字界面没有任何特点 习惯性的右键查看源代码 发现有一个PHP文件 点击进行访问后 发现有一个链接但是点击链接后没有发现任何东西 此时右键查看原代码也没有发现东西 但是可以肯定的是突
  • ERP收付款的操作与设计--开源软件诞生22

    赤龙ERP收款付款讲解 第22篇 用日志记录 开源软件 的诞生 进入地址 点亮星星 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github co
  • 4,引擎初始化--(5)初始化actor--5,初始化各个关卡中的各个actor-PostInitializeComponents()

    PostInitializeComponents 是actor最初处于完整状态的地方 所以 在这里经常编写actor在游戏开始时的初始化相关代码 此时 loadmap 加载完毕 actor加载完毕并初始化 world处于可玩状态 同时也有了
  • [搭建CLI效率工具] Rollup + TypeScript 搭建CLI工程

    环境搭建 工欲善其事必先利其器 使用Rollup搭建Typescript开发环境 毕竟Typescript是大势所趋并且Rollup相比较webpack对于node模块来说比较优化 创建项目目录并初始化 mkdir
  • vue中自定义链接的href内容,设置动态链接,动态添加请求头

    在http js页面定义好了需要动态添加的接口请求头 OPEN UR 如下 列如下 需要给点击下载模板时的 a 标签动态添加请求头和接口 html部分 a size middle class middleBtn 下载模板 a js部分 im
  • 如何更改element-ui自定义主题

    element ui总结 一 如何更改element ui的主题 1 在src下创建element variables scss文件 改变主题色变量 color primary a0c69d 改变 icon 字体路径变量 必需 font p
  • 树莓派安装openCV做图像识别

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文转自 新机器视觉 有时候我们会使用树莓派和摄像头去做图像识别 在树莓派和LINUX系统中最常用opencv去做图像识别 这次来介绍下树莓派安装opencv和用树莓派做
  • SD卡存储程序

    把采集的ad的数据存到SD卡中 int main void u16 fwrite counter 0 unsigned char Temp 11 data ok flag 1 for i 0 i lt 12 i ad i 0 for i 0
  • vtk创建点

    使用vtk库创建三维空间中的点 引言 开发环境 示例一 项目结构 实现代码 运行效果 示例二 项目结构 实现代码 运行效果 总结 引言 本文仅适合初学者 本文不提供vtk动态库的生成 以及在QtCreator中的引进vtk时的配置 本文先由
  • 牛人项目失败的总结

    tom lt 遇到的失败项目比较多 让人郁闷 仔细分析原因 主要在于 1 项目开始需求不明确 领导决定动手 就开始启动项目 造成和客户需要差距太大 导致失败 2 需求变更没有控制 客户提出新的需求 或者改变原来的需求 没有一个好的控制流程
  • 【模式识别4】YOLO目标检测数据集xml格式转txt格式

    YOLO目标检测数据集xml格式转txt格式 1 转换前的xml格式 2 xml格式转txt格式代码 2 1 源代码 2 2 需要修改的地方 3 转换后的txt格式 代码资源 voc2txt py 1 转换前的xml格式 如果我们使用Lab
  • 男人必读 --看了永不后悔,女人想看也可以进去……

    1 事业永远第一 虽然金钱不是万能的 但没有钱是万万不能的 虽然这句话很俗 但绝对有道理 所以30岁之前 请把你大部分精力放在你的事业上 事业远比爱情重要 如果说事业都不能永恒 那么爱情只能算是昙花一现 记 得那首 没有钱你会爱我吗 的歌吗
  • 基于Koa的微信第三方平台使用及搭建说明(一)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 前言 公司内部使用说明文档 记录一下 目的在于使内部人员了解和熟悉项目 不在于搭建教程 看不明白的就别看了 一 关于 Node Node是什么 官网上给出的定义是 一个搭建
  • Mac 好用的shell终端

    1 搜索关键词 my zsh 2 http ohmyz sh
  • 【docker】docker-compose实战之MySQL安装与配置

    唠嗑部分 首先说一下 MySQL是否适合容器化 数据库首先要解决数据的持久化问题 以确保服务宕机之后数据不会丢失 docker提供的数据卷虽然可以让数据保存在宿主机上 但是容器的 volumn数据卷的设计是围绕 Union FS镜像层提供持
  • scratch颜色实验(R+G+B)/自制素材/少儿编程scratch教研教案课件课程素材脚本

    scratch颜色实验 wmv
  • 在线接口文档管理工具推荐,支持在线测试,生成漂亮的http文档

    易文档 英文名叫easydoc 是新出来的文档管理平台 跟市面的那些有所不同 这个不管是编写体验还是预览 专业性和美观性都会大大超越其他的 看下他的预览效果 市面很多http接口文档的编写都是直接写markdown文档 这种编写起来特别麻烦
  • VBA 向文件写入编码为UTF-8的数据

    Sub Test 需要引入 ActiveX Data Objects ADO 组件 即 Microsoft ActiveX Data Objects 2 5 Library 或者 Microsoft ActiveX Data Objects
  • qt右键弹出菜单的一些实现方法

    在qt中 关于右键弹出菜单 有几种实现方法 1 在窗口初始化时 修改指定控件的右键菜单策略 然后把右键点击信号和某个槽函数连接 设置btnNew按钮的右键菜单策略 ui gt btnNew gt setContextMenuPolicy Q