QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示

这篇具有很好参考价值的文章主要介绍了QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里演示的是QT基础,主要包含:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式等功能演示,适合初学者食用

演示功能:点击鼠标左键、右键、中键、左右键同时点击,输出鼠标当前坐标;按下鼠标中键,鼠标样式被替换,按下鼠标左键,鼠标样式恢复默认 

鼠标事件重载,这里暂时不放出来了

1、打开QT创建一个 widget 项目

UI上随便画一点东西备用,不画也行,我这里创建的是 mainwindow 项目

QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示

 2、代码演示,篇幅原因就不放头文件了,这里的代码全部写在了cpp当中

初学者应该可以完全复制该代码,到自己的demo里面的,注意头文件需要声明一些东西

同时也可以尝试注释一些代码,演示的时候方面看效果

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QEvent>
#include <QMouseEvent>
#include <QMenu>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 开启鼠标追踪
    this->setMouseTracking(true);

    // 右键菜单 头文件中声明
    menu.addAction("复制");
    menu.addAction("粘贴");
    menu.addAction("撤销");
    menu.addAction("属性");
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 头文件中声明
bool MainWindow::event(QEvent * ev)
{
    // 筛选鼠标按钮被按压事件
    if(ev->type() == QEvent::MouseButtonPress)
    {
        // 创建鼠标事件的对象
        QMouseEvent * me = static_cast<QMouseEvent*>(ev);
        // 相对坐标
        qDebug() << "相对坐标:" << me->x() << "," << me->y();
        // 窗口坐标(针对于某一窗口或 widget)
        qDebug() << "程序坐标:" << me->windowPos().x() << "," << me->windowPos().y();
        // 屏幕坐标
        qDebug() << "屏幕坐标:" << me->screenPos().x() << "," << me->screenPos().y();

        // 本地坐标转全局坐标(屏幕坐标)
        QPoint gpos = mapToGlobal(me->pos());
        qDebug() << "本地坐标转屏幕坐标:" << gpos.x() << "," <<  gpos.y();

        // 获取鼠标位置 (屏幕位置)
        qDebug() << "鼠标位置:" << QCursor::pos().x() << "," << QCursor::pos().y();

        // 鼠标按键事件   单个触发用 button
        if(me->button() & Qt::LeftButton)
        {
            qDebug() << "鼠标左键被按下";
            // 鼠标样式恢复默认
            setCursor(Qt::ArrowCursor);
        }
        if(me->button() & Qt::RightButton)
        {
            // 显示菜单,在屏幕坐标位置
            menu.exec(gpos);
            qDebug() << "鼠标右键被按下";
        }
        if(me->button() & Qt::MidButton)
        {
            qDebug() << "鼠标中键被按下";
            QPixmap pix("C:/Users/patient/Pictures/Saved Pictures/小黄鸡IKUN篮球.jpg");
            // 替换鼠标样式,默认触发点在图片中心
            QCursor cur = QCursor(pix,-1,-1);
            setCursor(cur);
        }
        // 鼠标左右键同时按下    两个一起触发用 buttons
        if(me->buttons() & Qt::LeftButton && me->buttons() & Qt::RightButton)
            qDebug() << "鼠标左右键同时按下";    


    }

    return QWidget::event(ev);
}

3、演示效果

QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示

 

 4、注意事项

坐标的 0,0 位置一般是在窗口或者屏幕的左上角位置,坐标是可以为负数的(窗口坐标或程序坐标),这里动图演示的不完整,有兴趣的小伙伴可以自己尝试一下

相对坐标:指的是鼠标相对于整个窗口的位置,0,0 的位置是在窗口左上角

窗口坐标(程序坐标):指的是某 widget 的坐标,例如在QLabel中取窗口坐标,那么 0,0 的位置是在 QLabel 的左上角

屏幕坐标:就是指整个屏幕的坐标,0,0 的位置是在屏幕左上角文章来源地址https://www.toymoban.com/news/detail-484623.html

到了这里,关于QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鼠标禁用样式(cursor: not-allowed)无效和鼠标禁用事件(pointer-events: none)冲突

    鼠标禁用样式: cursor: not-allowed; 鼠标禁用事件: pointer-events: none; 元素永远不会成为鼠标事件的target。但是,当其后代元素的pointer-events属性指定其他值时,鼠标事件可以指向其后代元素。 如果同时使用 ,鼠标为默认样式; 解决方法: 外层添加盒子将样式分开 外部盒子使

    2024年02月13日
    浏览(70)
  • 【蚂蚁链学习4】授予勋章(蚂蚁链智能合约+函数部分应用+事件event)

    第一章 modifier函数修饰符 函数修饰符看起来跟函数没什么不同,不过 modifier 告诉编译器,这是个 modifier (修饰符),而不是个function(函数)。它不能像函数那样被直接调用,只能被添加到函数定义的末尾,用以改变函数的行为。函数修饰符也可以带参数。就像函数那样使

    2024年02月12日
    浏览(36)
  • Qt - Qt5事件处理(鼠标事件)

    鼠标事件 ​ 鼠标事件包括鼠标的移动,鼠标键按下,松开,单击,双击等 使用鼠标事件时,加入对应头文件 常见的鼠标事件如下: QMouseEvent类包含了用于描述鼠标事件的参数。 当在一个窗口里按住鼠标按键、或移动、或释放就会产生鼠标事件QMouseEvent。 鼠标移动事件只会

    2023年04月09日
    浏览(42)
  • Qt 事件 < 二 >鼠标键盘事件

    Qt 是一个流行的 C++ 框架,用于构建跨平台的图形用户界面应用程序。在 Qt 中,处理键盘事件和鼠标事件是常见的任务,因为用户输入在交互式应用程序中至关重要。下面是关于 Qt 键盘事件和鼠标事件的学习总结: 键盘事件 (QKeyEvent)使用入门: 事件处理函数: 键盘事件通过

    2024年01月18日
    浏览(42)
  • [QT/C++]如何得知鼠标事件是由触摸事件转换而来的,使得鼠标触摸事件分离

    依据来源:https://doc.qt.io/qt-5/qml-qtquick-mouseevent.html 具体是在event事件或者mouse系列事件中捕获到鼠标事件后,用如下代码判断鼠标事件是否由触摸事件转换而来的 通过该条件的一律返回,剩下的就是不由触摸事件生成的鼠标事件,由此做到鼠标与触摸事件的分离,使得触摸事

    2024年02月13日
    浏览(39)
  • qt鼠标事件

    鼠标移动事件,只要移动鼠标,就会触发这个函数,其中,正常情况下,只有当鼠标在QWidget界面点击鼠标后,才会捕捉到鼠标的坐标,那如何实现,在不点击鼠标的情况下,也可以捕捉到鼠标移动事件呢? 代码如下: 比如在主窗口QWidget下有一个父窗口Lable,在鼠标进入Lab

    2024年02月09日
    浏览(41)
  • Qt 鼠标进入离开事件

    QEvent::Enter ​ 鼠标进入事件,当鼠标进入到窗口/控件内部时,触发该事件,它对应的子类是 QEnterEvent QEvent::Leave ​ 鼠标离开事件,当鼠标离开到窗口/控件内部时,触发该事件 自定义一个标签控件 LabelX ,让它继承自 QLabel ,然后重写父类的 enterEvent 和 leaveEvent 。 代码如下:

    2024年01月24日
    浏览(38)
  • 【QT】鼠标常用事件

    新建项目 加标签控件 当鼠标进去,显示【鼠标进入】,离开时显示【鼠标离开】 将QLable提升成自己的控件,然后再去捕获 添加文件 改继承的类名 提升类 同一个父类,可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明,.cpp中实现 测试 鼠标的移动、按下、松开事件

    2024年02月06日
    浏览(39)
  • qt鼠标常用事件

    和上一个案例相同,也是做了提升,换了相同父类,但是方式有所不同 先在widget.ui中加入label标签,此时其父类为QLabel,然后想实现鼠标在QLabel上的捕获。所以我们需要把QLabel提升为自己的框架,然后自定义框架后,我们就可以自己捕获信息了。然后添加新文件mylabel.h和mylabel.cpp,

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包