Qt-Day09-学习笔记


在这里插入图片描述

1. 定时器

  • mousePressEvent();//鼠标点击事件
  • mouseReleaseEvent;//鼠标松开事件
  • mouseDoubleEvent;//鼠标松开事件
  • mouseMoveEvent;//鼠标松开事件
  • keyPressEvent()//键盘里面键值按下的事件
  • keyReleaseEvent()//键盘里面键值松开的事件
  • timerEvent()//定时器事件
  • enterEvent()//进入窗口的事件
  • leaveEvent()//离开窗口的事件
  • closeEvent();//关闭事件
  • dragEnterEvent();//拖事件处理
  • dropEvent()//放事件处理
  • eventFilter();//事件过滤器

QMimeData类支持多种不同文件的类型的数据(拖放数据的类)
测试函数 获取函数 设置函数 MIME类型
hastext text setText text
hsHtml
hasUrls
hasImage
hasColor

事件过滤器
过滤一些我们不需要的一些事件 比如我的键盘我只要数字进行输入 但是我不需要其他键的事件

qt的事件过滤器
1.事件过滤器可以对其他的组件接收端额时间进行监控
2.任意的object对象都可以作为时间过滤器使用
3.事件过滤器对象需要重启eventFilter()方法
4.组件是同过installEvent()方法来安装事件过滤器
5.事件过滤器在组件之前接受
6.事件过滤器能够决定是否将这个事件转发给组件

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    timerID_fast = this->startTimer(1000);          //启动定时器,以毫秒为单位,每间隔1S触发一次定时器
    timerID_last = this->startTimer(500);

}

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

void Widget::keyPressEvent(QKeyEvent *event)                //键值按下事件
{
    qDebug() << event->key() <<endl;
}

void Widget::keyReleaseEvent(QKeyEvent *event)              //键值松开事件
{
    qDebug() << event->key() <<endl;
}

void Widget::timerEvent(QTimerEvent *event)                 //定时器的事件
{
    //如果触发定时器的编号是timeID_fast,处理,否则就不处理
    if(event->timerId() == timerID_fast)
    {
        static int n = 0;
        //如果达到20s就关闭定时器
        if(n = 5)
        {
            qDebug()<<"timeID_fast 被杀死了"<<endl;
            killTimer(timerID_fast);
        }
        //如果当前的界面ui里面有这个控件的额名字, .pro文件里面引用名字的时候报错,编译一下即可
        ui->label->setText(
                    QString("<center><h1>timerID_fast:%1</h1></center>"));
    }
    else if (event->timerId() == timerID_last) {
        static int n = 0 ;
        ui->label_2->setText(
                    QString("<center><h1>timerID_fast:%1</h1></center>").arg(n++));
    }
}

void Widget::enterEvent(QEvent *event)                      //进入窗口事件
{
    ui->label->setText(
                QString("<center><h1>mouse enter</h1></center>"));
}

void Widget::leaveEvent(QEvent *event)                      //离开窗口事件
{
    ui->label->setText(
                QString("<center><h1>mouse leaver</h1></center>"));
}

void Widget::closeEvent(QCloseEvent *event)                 //关闭窗口
{
    int ret = QMessageBox::question(this,"提示","你是否要关闭窗口");
    if(ret == QMessageBox::Yes)
    {
        //关闭窗口 接受一些需要在下面做的一些事情. 比如保存数据,调用什么接口
        event->accept();        //接受者处理当前事件
    }
    else
    {
        //不关闭窗口,忽略这个事件
        event->ignore();        //接收者忽略这个事件
    }
}

void Widget::dragEnterEvent(QDragEnterEvent *event)         //拖事件处理
{
    if(event->mimeData()->hasUrls())
    {
        event->acceptProposedAction();
    }
    else {
        event->ignore();
    }
}

void Widget::dropEvent(QDropEvent *event)                   //放事件处理
{
    if(event->mimeData()->hasUrls())
    {
        if(event->mimeData()->hasUrls())
        {
            QList<QUrl> list = event->mimeData()->urls();
            for(int i=0;i<list.length();i++)
            {
                ui->textEdit->insertPlainText(list[i].toLocalFile()+"\m");
            }

        }
    }
}

  • 鼠标移入:
    在这里插入图片描述
  • 鼠标移出:在这里插入图片描述
  • 关闭窗口:
  • 在这里插入图片描述

2. 事件过滤器

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //安装textEdit这个事件过滤器
    ui->textEdit->installEventFilter(this);
    //安装spinBox这个事件过滤器
    ui->spinBox->installEventFilter(this);
}

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

bool Widget::eventFilter(QObject* ob,QEvent *e)
{
    //判断textEdit是否被事件过滤器的过滤对象
    if(ob == ui->textEdit)
    {
        //判断是否需要过滤器事件
        if(e->type() == QEvent::KeyPress)
        {
            qDebug()<<"textEdit"<<endl;
            QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(e);
            //将QEevent强制转换为发生的事件类型
            if(wheelEvent->delta()>0)
            {
                ui->textEdit->zoomIn();
                qDebug()<<"textEdit++"<<endl;
            }
            else
            {
                ui->textEdit->zoomOut();
                qDebug()<<"textEdit--"<<endl;
            }
            //如果不希望改时间继续传递和被处理 返回false就行了
            return true;
        }
        else
        {
            return  false;
        }
    }
    else if(ob == ui->spinBox)
    {
        if(e->type() == QEvent::KeyPress)
        {
            qDebug()<<"spinBox"<<endl;
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
            if(keyEvent->key() == Qt::Key_0)
            {
                qDebug()<<"spinBox++"<<endl;
                ui->spinBox->setValue(10);
                return true;
            }
            else
            {
                qDebug()<<"spinBox--"<<endl;
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else
    {
        //默认执行的效果
        return QWidget::eventFilter(ob,e);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值