花了两天时间找我的QObject::startTimer()定时到了之后却不进入void timerEvent(QTimerEvent *event);的问题,很是头大,最终找到了原因,还是自己的Qt学的不到家。
在我的这个文件中还有一个bool event(QEvent* e),我在这个里面的最后返回了return true;所以定时的事件就丢了,上代码看看:
#include "qtimereventtest.h"
#include <iostream>
using namespace std;
QTimerEventTest::QTimerEventTest(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
int tid = startTimer(30);
}
QTimerEventTest::~QTimerEventTest()
{
}
void QTimerEventTest::timerEvent(QTimerEvent *event)
{
cout << "timerID:" << event->timerId();
cout << "Retest a:" << ReTest::instance()->a << endl;
int a = 1;
}
bool QTimerEventTest::event(QEvent* e)
{
if (e->type() == KEvent::Idle) //KEvent::Idle这个是公司自己定义的,可以自己换别的实验
{
...(中间代码不重要)
}
return QObject::event(e); //原来返回的是return true;所以QTimerEvent丢了不处理
}
我的QTimerEvent:
#ifndef QTIMEREVENTTEST_H
#define QTIMEREVENTTEST_H
#include <QtGui/QMainWindow>
#include <QTimer>
#include "retest.h"
#include "ui_qtimereventtest.h"
class QTimerEventTest : public QMainWindow
{
Q_OBJECT
public:
QTimerEventTest(QWidget *parent = 0, Qt::WFlags flags = 0);
~QTimerEventTest();
bool event(QEvent* e);
protected:
void timerEvent(QTimerEvent *event);
private:
Ui::QTimerEventTestClass ui;
};
#endif // QTIMEREVENTTEST_H