这里演示的是QT基础,主要包含:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式等功能演示,适合初学者食用。
演示功能:点击鼠标左键、右键、中键、左右键同时点击,输出鼠标当前坐标;按下鼠标中键,鼠标样式被替换,按下鼠标左键,鼠标样式恢复默认
鼠标事件重载,这里暂时不放出来了
1、打开QT创建一个 widget 项目
UI上随便画一点东西备用,不画也行,我这里创建的是 mainwindow 项目
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、演示效果
4、注意事项
坐标的 0,0 位置一般是在窗口或者屏幕的左上角位置,坐标是可以为负数的(窗口坐标或程序坐标),这里动图演示的不完整,有兴趣的小伙伴可以自己尝试一下
相对坐标:指的是鼠标相对于整个窗口的位置,0,0 的位置是在窗口左上角
窗口坐标(程序坐标):指的是某 widget 的坐标,例如在QLabel中取窗口坐标,那么 0,0 的位置是在 QLabel 的左上角文章来源:https://www.toymoban.com/news/detail-484623.html
屏幕坐标:就是指整个屏幕的坐标,0,0 的位置是在屏幕左上角文章来源地址https://www.toymoban.com/news/detail-484623.html
到了这里,关于QT基础:event 函数重载、筛选鼠标按压事件、获取鼠标位置、右键显示菜单、修改鼠标样式功能演示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!