qt关于鼠标、键盘等常用事件

  • 直接上代码吧
  • .h文件:
#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include 
#include 
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void mousePressEvent(QMouseEvent *event);       //鼠标点击事件
    void mouseDoubleClickEvent(QMouseEvent *event); //鼠标双击事件
    void mouseReleaseEvent(QMouseEvent *event);     //鼠标释放事件
    void mouseMoveEvent(QMouseEvent *event);        //鼠标移动事件
    void wheelEvent(QWheelEvent *event);            //鼠标滑轮事件

    void keyPressEvent(QKeyEvent *event);           //键盘事件

    void resizeEvent(QResizeEvent *event);          //界面大小改变事件

    void changeEvent(QEvent *);                     //改变事件

    void closeEvent(QCloseEvent *);                 //界面关闭事件

    bool eventFilter(QObject *, QEvent *);          //事件过滤器
private:
    Ui::Widget *ui;
    QLabel *label;
};
#endif // WIDGET_H

  • .cpp文件:
#include "widget.h"
#include "ui_widget.h"
#include 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setMouseTracking(true);//该属性用来设置某个控件是否被跟踪轨迹,不设置此行,则只有鼠标点击时才能获取移动事件。

    label = new QLabel(this);
    label->resize(100,60);
    label->setStyleSheet("background-color:red");
    label->installEventFilter(this);//为label设置过滤器
}

Widget::~Widget()
{
    delete ui;
}
//鼠标点击事件
void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
        qDebug()<<"mousePressEvent:左键";
    else if(event->button() == Qt::RightButton)
        qDebug()<<"mousePressEvent:右键";
}
//鼠标双击击事件
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
        qDebug()<<"mouseDoubleClickEvent:左键双击";
    else if(event->button() == Qt::RightButton)
        qDebug()<<"mouseDoubleClickEvent:右键双击";
}
//鼠标释放事件,即点击后,释放时会触发
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
     qDebug()<<"mouseReleaseEvent:";
}
//鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
//    qDebug() << "mouseMoveEvent:" << event->x() << ":" << event->y();//x()、y()点击处的横纵坐标
}
//鼠标滚轮事件,event->delta()>0,则是向上滚动,反之,向下。
void Widget::wheelEvent(QWheelEvent *event)
{
    if(event->delta() > 0)
        qDebug()<<"wheelEvent:上滚动";
    else
        qDebug()<<"wheelEvent:下滚动";
}
//键盘事件,按下键盘则会触发执行
void Widget::keyPressEvent(QKeyEvent *event)
{
    //event->key()获取键盘值,可判断是哪一个键被按下
    switch (event->key())
        {
        case Qt::Key_Escape:
            qDebug() <<"ESC";
            break;
        case Qt::Key_F1:
            qDebug() <<"F1";
            break;
        case Qt::Key_F2:
            qDebug() <<"F2";
            break;
        case Qt::Key_5:
            qDebug() <<"5";
            break;
        case Qt::Key_A:
            qDebug() <<"A";
            break;
        case Qt::Key_B:
            qDebug() <<"B";
            break;
        case Qt::Key_C:
            qDebug() <<"C";
            break;
        default:
            qDebug() << event->key();
            break;
    }
}
//界面大小改变事件,界面大小改变则会触发执行此函数
void Widget::resizeEvent(QResizeEvent *event)
{
    qDebug()<<"resizeEvent:"<<size();//获取界面大小
}
//改变事件
void Widget::changeEvent(QEvent *event)
{
    //WindowStateChange 界面状态改变,如最大化,最小化,正常
    if(event->type() == QEvent::WindowStateChange){
        if(this->windowState() == Qt::WindowMaximized)
            qDebug()<<"changeEvent:最大化";
        else if(this->windowState() == Qt::WindowMinimized)
            qDebug()<<"changeEvent:最小化";
        else if(this->windowState() == Qt::WindowNoState)
            qDebug()<<"changeEvent:正常";
    }
}
//界面关闭事件
void Widget::closeEvent(QCloseEvent *event)
{
//    event->ignore();  //忽略退出信号,程序继续运行
    event->accept();  //接受退出信号,程序退出
}
//事件过滤器,去监听设置了过滤器的界面或控件
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == label)
    {
        if(event->type() == QMouseEvent::Enter)
            qDebug()<<" QMouseEvent::Enter,进入";
        else if(event->type() == QMouseEvent::Leave)
            qDebug()<<" QMouseEvent::Leave,离开";
        else if(event->type() == QMouseEvent::MouseButtonPress)
            qDebug()<<" QMouseEvent::MouseButtonPress,点击";
        else if(event->type() == QMouseEvent::MouseButtonDblClick)
            qDebug()<<" QMouseEvent::MouseButtonDblClick,双击";

    }
    return QWidget::eventFilter(obj,event);
}

你可能感兴趣的:(qt,qt)