概述
鼠标事件
鼠标事件包括鼠标的移动,鼠标键按下,松开,单击,双击等
使用鼠标事件时,加入对应头文件
#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会自动捕捉鼠标轨迹,鼠标指针所在的父窗口会继续接受鼠标事件,直到最后一个鼠标按键被释放。
鼠标事件实例
设置一个特定窗口,状态栏右侧会实时显示当前鼠标所在的位置信息
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);
}
}
注:
- this->setMouseTracking(true); 设置窗体跟踪鼠标。setMouseTracking()函数设置窗体是否追踪鼠标,默认为false,不追踪,在此情况下应至少有一个鼠标键被按下时才响应鼠标移动事件
- QMouseEvent类的button()方法 可以获得发生鼠标事件的按键属性(左键,右键,中键等)
- QMouseEevent类的x()和y()方法可以获得鼠标相对于接收事件的窗体位置,globalX()和globalY()方法可以获得鼠标相对窗口系统的位置
最后
以上就是直率微笑为你收集整理的Qt - Qt5事件处理(鼠标事件)的全部内容,希望文章能够帮你解决Qt - Qt5事件处理(鼠标事件)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复