在Qt中如何判断鼠标离开某一操作的时候,在时间差内自动执行某一个操作

本文详细介绍了在Qt环境下,通过使用QTimer类实现鼠标操作时间间隔内的自动执行特定操作的方法,包括如何在mousePressEvent和mouseReleaseEvent事件中控制定时器的启动与停止,以及在预设时间内触发特定事件的功能。通过实例代码演示了在手写识别过程中,如何判断输入完成并在无后续输入的时间间隔内自动识别并显示结果或确认结果的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在Qt中如何判断鼠标离开某一操作的时候,在时间差内自动执行某一个操作。如在手写识别的过程中如何判断最后一笔输入完成时,(在输入过程中,一段时间内没有输入)在时间差内没有在输入,自动对输入结果识别显示,在时间差内没有选择识别后选结果,自动把识别结果的第一个字自动确定为最终的结果? 


 


   查阅经过资料,已经实现基本的需求功能,可以通过使用Qt中的定时器类QTimer来实现其功能,利用QTimer类的start(int msec) ,stop(), 信号函数


t imeout()就可以实现,我的基本思路是在mouseRleaseEvent(QMouseEvent *)  mousePressEvent(QMouseEvent *)这两个方法中配合使用start(int msec) ,stop()


槽函数,当鼠标按下时,停止计时,鼠标释放是开始计时;设置的等待时间自动执行另一事件;实现测试代码如下


#ifndef __TIMER_H__
#define __TIMER_H__
#include <QTimer>
#include <QTime>
#include <QWidget>
#include <QDebug>
#include <QMouseEvent>
class  Timer:public QWidget
{
Q_OBJECT
public:
 Timer(QWidget *parent =0);
 virtual ~Timer();
protected:
 virtual void mousePressEvent(QMouseEvent *event);
 virtual void mouseReleaseEvent(QMouseEvent *event);
public slots:
 void test();
private:
 QTimer *m_timer;
 QTime m_time;
 int i;
 int i_press;
 
};
#endif //timer.h




//timer.cpp
Timer::Timer(QWidget *parent)
 :QWidget(parent)
{
 i=o;
 i_press=0;
 //创建定时器
 m_timer = new QTimer(this);
 //当定时器到设定时间的时候自动执行test()函数
 connect(m_timer, SIGNAL(timeout()), this, SLOT(test()));
}


Timer::~Timer()
{
 delete m_timer;
 if(m_timer != NULL)
 {
  m_timer =NULL;
 }
}
//自动执行的事件
void Timer::test()
{
 m_time = QTime::currentTime()
 qDebug()<<"currnet time="<<m_time.second();
 qDebug()<<"i="<<i++;
 qDebug()"@@@@@@@@@@@@@@@@@ test@@@@@@@@@@@";
 //执行完事件时候必须停止定时器否则将会在设置时间超时时循环响应
 m_timer->stop();
}


void Timer::mousePressEvent(QMouseEvent *event)
{
 Q_UNUSED(event);
 m_timer->stop();
}


void Timer::mouseReleaseEvent(QMouseEvent *event)
{
 Q_UNUSED(event);
 //设置响应时间为3秒
 m_timer->start(3000);
}


//main.cpp


#include <QApplication>
#include "timer.h"
 int main(int argc,char *argv[])
{
 QApplication app(argc, argv);
 Timer timer;
 timer.resize(400,400);
 timer.show();
 return app.exec();


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值