QT(2)事件

一. 鼠标事件

1. 鼠标移入移出事件

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QEvent>

namespace Ui {
    
    
class MainWindow;
}

class MainWindow : public QMainWindow
{
    
    
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    //重写 鼠标移入
    void enterEvent(QEvent *);
    //重写 鼠标移出
    void leaveEvent(QEvent *);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

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

#include<QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    
    
    delete ui;
}
//鼠标移入
void MainWindow::enterEvent(QEvent *)
{
    
    
    qDebug()<<"鼠标移入";
}
//鼠标移出
void MainWindow::leaveEvent(QEvent *)
{
    
    
    qDebug()<<"鼠标移出";
}

运行结果:
在这里插入图片描述

2. 鼠标单击事件

重写:

    // 鼠标点击
    void mousePressEvent(QMouseEvent *);

实现:

#include <QMouseEvent>
// 鼠标点击
void MainWindow::mousePressEvent(QMouseEvent * event)
{
    
    
    //获取点击的下标
    qDebug() << event->x() << ":" << event->y();
    if(event->button() == Qt::LeftButton)
    {
    
    
        qDebug() << "左键点击" ;
    }
    else if(event->button() == Qt::RightButton)
    {
    
    
        qDebug() << "右键点击" ;
    }
    else if(event->button() == Qt::MidButton)
    {
    
    
        qDebug() << "中键点击" ;
    }
}

3. 鼠标按下移动事件

    // 鼠标按下移动事件
    void mouseMoveEvent(QMouseEvent *);
// 鼠标按下移动事件
void MainWindow::mouseMoveEvent(QMouseEvent *)
{
    
    
  qDebug()<<"鼠标按下移动";
}

4. 鼠标按下松开事件

    // 鼠标按下松开
    void mouseReleaseEvent(QMouseEvent *);
// 鼠标按下松开
void MainWindow::mouseReleaseEvent(QMouseEvent *)
{
    
    
    qDebug() << "鼠标松开" ;
}

5. 鼠标双击事件

    // 鼠标双击事件
    void mouseDoubleClickEvent(QMouseEvent *);
// 鼠标双击事件
void MainWindow::mouseDoubleClickEvent(QMouseEvent *)
{
    
    
    qDebug() << "双击";
}

6. 鼠标滚动事件

    //鼠标滚动事件
    void wheelEvent(QWheelEvent * event);
//鼠标滚动
void MainWindow::wheelEvent(QWheelEvent * event)
{
    
    
    if(event->delta() > 0)
    {
    
    
        qDebug() << "上滚";
    }
    else
    {
    
    
        qDebug() << "下滚";
    }
}

二. 键盘事件

1. 单按键事件

    // 键盘事件
    void keyPressEvent(QKeyEvent *);
//键盘事件
void MainWindow::keyPressEvent(QKeyEvent * event)
{
    
    
    switch (event->key())
    {
    
    
        //ESC键
        case Qt::Key_Escape:
            qDebug() <<"ESC";
        break;
        //回车键
        case Qt::Key_Return:
            qDebug() <<"Enter";
        break;
        //退格键
        case Qt::Key_Backspace:
            qDebug() <<"Back";
        break;
        //空格键
        case Qt::Key_Space:
            qDebug() <<"Space";
        break;
        //F1键
        case Qt::Key_F1:
            qDebug() <<"F1";
        break;
    }
}

2. 组合键事件

//键盘事件
void MainWindow::keyPressEvent(QKeyEvent * event)
{
    
    
     //先检测Ctrl键是否按下
    if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_A)
    {
    
    
          qDebug() << "ctrl + a";
    }

    if(event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_M)
    {
    
    
        qDebug() << "ctrl + m";
    }
}

3. 键盘+鼠标 事件

ctrl + 左键 事件需要在鼠标单击事件中实现

// 鼠标点击
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    
    
    if (QApplication::keyboardModifiers() == Qt::ControlModifier && event->button() == Qt::LeftButton)
    {
    
    
        qDebug() << "ctrl + 左键";
    }
}

a+ 左键 事件则需要在鼠标单击事件中实现

// 键盘事件
void MainWindow::keyPressEvent(QKeyEvent *event)
{
    
    
    if (event->key() == Qt::Key_A && QApplication::mouseButtons() == Qt::LeftButton)
    {
    
    
       qDebug() << "a + 左键";
    }
}

三. 定时器

点击发送验证码功能,倒计时 60秒

1. QTimer 实现

	QPushButton * button  = new QPushButton(this);
    button->setText("发送验证码");
    QTimer * timer = new QTimer(this); // 定时任务对象
    static int num = 5;
    connect(button,&QPushButton::clicked,[=](){
    
     // 点击按钮启动定时器
        //如果定时器没有激活,才启动,防止多次点击start按钮出现错误
        if (timer->isActive() == false)
        {
    
    
            timer->start(1000); // 隔 1000 毫秒触发
            num = 5;
        }
        connect(timer,&QTimer::timeout,[=](){
    
    
            if (num > 0){
    
    
                button->setText(QString::number(num));
                num--;
            } else
            {
    
    
                timer->stop();
                button->setText("发送验证码");
            }
        });
    });

2. 重写父类的 timerEvent

    // 定时器事件
    void timerEvent(QTimerEvent *);
void MainWindow::timerEvent(QTimerEvent * event)
{
    
    
    qDebug()<< "定时器执行了";
}

启动方法:

startTimer(1000); // 隔 1000 毫秒触发

猜你喜欢

转载自blog.csdn.net/haiyanghan/article/details/113446587