Qt - Qt5事件处理(鼠标事件)

这篇具有很好参考价值的文章主要介绍了Qt - Qt5事件处理(鼠标事件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

鼠标事件

​ 鼠标事件包括鼠标的移动,鼠标键按下,松开,单击,双击等

使用鼠标事件时,加入对应头文件

#include <QMouseEvent>

常见的鼠标事件如下:

  void mousePressEvent(QMouseEvent *e); //单击
 void mouseMoveEvent(QMouseEvent *e); //移动
 void mouseReleaseEvent(QMouseEvent *e); //释放
 void mouseDoubleClickEvent(QMouseEvent *e); //双击
  void wheelEvent(QWheelEvent *e); //滑轮滚动

QMouseEvent类包含了用于描述鼠标事件的参数。

当在一个窗口里按住鼠标按键、或移动、或释放就会产生鼠标事件QMouseEvent。

鼠标移动事件只会在按下鼠标按键的情况下才会发生,除非通过显式调用QWidget::setMouseTracking()函数来开启鼠标轨迹,这种情况下只要鼠标指针在移动,就会产生一系列的QT鼠标事件;

在一个窗口中,当鼠标按键被按下时,QT会自动捕捉鼠标轨迹,鼠标指针所在的父窗口会继续接受鼠标事件,直到最后一个鼠标按键被释放。

鼠标事件实例

​ 设置一个特定窗口,状态栏右侧会实时显示当前鼠标所在的位置信息

Qt - Qt5事件处理(鼠标事件)

mainwindow.h头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);
    void mouseDoubleClickEvent(QMouseEvent *e);
    void wheelEvent(QWheelEvent *e);

private:
    Ui::MainWindow *ui;

    QLabel *statusLabel;
    QLabel *MousePosLabel;
};
#endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle(tr("鼠标事件"));
    statusLabel = new QLabel;
    statusLabel->setText(tr("当前位置:"));
    statusLabel->setFixedWidth(100);
    MousePosLabel = new QLabel;
    MousePosLabel->setText(tr(""));
    MousePosLabel->setFixedWidth(100);
    statusBar()->addPermanentWidget(statusLabel);
    statusBar()->addPermanentWidget(MousePosLabel);
    this->setMouseTracking(true);
    resize(400,400);
}

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

void MainWindow::mousePressEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    if(e->button()==Qt::LeftButton)
        statusBar()->showMessage(tr("左键:")+str);
    else if(e->button()==Qt::RightButton)
        statusBar()->showMessage(tr("右键:")+str);
    else if(e->button()==Qt::MidButton)
        statusBar()->showMessage(tr("中键:")+str);
}

void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
}

void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    statusBar()->showMessage(tr("释放在:")+str,3000);
}

void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)
{
    QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
    statusBar()->showMessage(tr("双击在:")+str,3000);
}

void MainWindow::wheelEvent(QWheelEvent *e)
{
    if(e->delta()>0) {
        statusBar()->showMessage(tr("鼠标滑轮向外滚动"),5000);
    }
    else {
        statusBar()->showMessage(tr("鼠标滑轮向内滚动"),5000);
    }
}

注:文章来源地址https://www.toymoban.com/news/detail-407943.html

  1. this->setMouseTracking(true); 设置窗体跟踪鼠标。setMouseTracking()函数设置窗体是否追踪鼠标,默认为false,不追踪,在此情况下应至少有一个鼠标键被按下时才响应鼠标移动事件
  2. QMouseEvent类的button()方法 可以获得发生鼠标事件的按键属性(左键,右键,中键等)
  3. QMouseEevent类的x()和y()方法可以获得鼠标相对于接收事件的窗体位置,globalX()和globalY()方法可以获得鼠标相对窗口系统的位置

到了这里,关于Qt - Qt5事件处理(鼠标事件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Qt窗口设置无边框不能移动,鼠标穿透后不能响应点击事件

      最近在做一个迷你小工具,准备干点不可描述的事情,想要短小强悍,始终在最顶层显示,同时不要自带的关闭按钮和边框,百度一下,发现是需要设置如下两个属性:   那么问题来了,这样的话一运行窗体就在正中间,而且无法拖动,就像这样   哪怕对于我这种

    2024年02月10日
    浏览(46)
  • 【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.4 鼠标按下、移动、释放事件

    本章要实现的整体效果如下: QEvent::MouseButtonPress ​ 鼠标按下时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseMove ​ 鼠标移动时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseButtonRelease ​ 鼠标释放时,触发该事件,它对应的子类是 QMouseEvent 本节通过两个案例来讲

    2024年02月08日
    浏览(37)
  • 【Qt图形视图框架】自定义QGraphicsItem和QGraphicsView,实现鼠标(移动、缩放)及键盘事件、右键事件

    说明 在使用Qt的图形视图框架实现功能时,一般会在其基础上进行自定义功能实现。 如:滚轮对场景的缩放,鼠标拖动场景中的项,以及可以在场景中进行右键操作等。 示例 myitem 为自定义QGraphicsItem,实现了边框、重绘事件、鼠标悬停、按键、右键菜单等功能。 myitem.h myi

    2024年02月04日
    浏览(37)
  • Qt鼠标点击事件处理:显示鼠标点击位置(完整示例)

    Qt 入门实战教程(目录) 前驱文章: Qt Creator 创建 Qt 默认窗口程序(推荐) 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。 例如点击鼠标,按下按键。 在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 如鼠标事件(例如点击

    2024年02月10日
    浏览(38)
  • Qt鼠标点击事件处理:按Escape键退出程序

    Qt 入门实战教程(目录) 首先,创建一个名称为QtKeyEscape的Qt默认的窗口程序。 参考 :Qt Creator 创建 Qt 默认窗口程序 打开Qt Creator 编辑 项目 Headers mainwindow.h 右键 class MainWindow Refactor Insert Virtual Function of Base Classes 如下图所示: 选择 QWidget keyPressEvent Insertion options: Insert defini

    2024年02月09日
    浏览(26)
  • 关于嵌入式Qt5配置环境变量导致鼠标显示与隐藏

            不写QT_QPA_EVDEV_MOUSE_PARAMETERS环境变量则不显示鼠标,反之,环境变量配置正确则显示鼠标 如设置 Qt环境变量 就能显示鼠标。 在交叉编译并移植Qt-Embedded后,在开发板中配置环境变量如下 运行程序后,程序能正常运行,也能正常触摸点击,就是没有鼠标显示 以往

    2024年02月10日
    浏览(53)
  • 鼠标事件以及 onmouseover, onmouseout 鼠标移动事件动态渲染的注意点

    指的是鼠标在进入某个元素的时候触发的事件 指的是鼠标在离开某个元素时触发的事件 onclick-------------------------------------鼠标单击触发 ondblclick----------------------------------鼠标双击触发 onmousemove---------------鼠标在上面移动时触发 核心点以及坑点.onmouseover, onmouseout 如果绑定在同

    2024年02月15日
    浏览(26)
  • vue 设置全局鼠标移动事件

    要设置全局鼠标移动事件,可以使用 Vue 的 mixin 实现。在 mixin 中,我们可以使用 $on 方法监听 mousemove 事件,并在组件销毁时使用 $off 方法移除监听器,以避免内存泄漏。以下是一个例子: 这样,每个组件都可以使用全局鼠标移动事件,而不需要在每个组件中单独设置。

    2024年02月09日
    浏览(26)
  • JavaScript鼠标移动事件及案例

    一、鼠标点击事件 1.onclick单击事件         鼠标单击时事件处理函数 input type=\\\"button\\\" id=\\\"bt\\\" value=\\\"点击\\\" script //找到按钮并设置点击事件    document.getElementById(\\\"bt\\\").onclick  = function (){         //被点击后弹出弹出框        alert(\\\"按钮被点击\\\")    } /script 2.ondblclick双击事件  鼠

    2023年04月08日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包