在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();
}
查阅经过资料,已经实现基本的需求功能,可以通过使用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();
}