widget.h
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public:
void elapsed_QTime(int ms);
void elapsed_QElapsedTimer(int ms);
void elapsed_qWait(int ms);
void elapsed_QEventLoop(int ms);
void elapsed_qSleep(int ms);
void elapsed_msleep(int ms);
void elapsed_QwaitCondition(int ms);
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
private:
// typedef void (*myElapsed)(int);//no
};
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTime>
#include <QElapsedTimer>
#include <QTest>
#include <QTimer>
#include <QThread>
#include <QWaitCondition>
typedef void (Widget::*myElapsed[])(int);
myElapsed mE = {
&Widget::elapsed_QTime,
&Widget::elapsed_QElapsedTimer,
&Widget::elapsed_qWait,
&Widget::elapsed_QEventLoop,
&Widget::elapsed_qSleep,
&Widget::elapsed_msleep,
&Widget::elapsed_QwaitCondition
};
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::elapsed_QTime(int ms)
{
QTime t;
t.start();
// while(t.elapsed() < ms);//no response
while(t.elapsed() < ms)//response
QCoreApplication::processEvents();
}
void Widget::elapsed_QElapsedTimer(int ms)//response
{
QElapsedTimer t;
t.start();
while(t.elapsed() < ms)
QCoreApplication::processEvents();
}
void Widget::elapsed_qWait(int ms)//response
{
QTest::qWait(ms);
}
void Widget::elapsed_QEventLoop(int ms)//response
{
QEventLoop eventLoop;
QTimer::singleShot(ms, &eventLoop, SLOT(quit()));
eventLoop.exec();
}
void Widget::elapsed_qSleep(int ms)//no response
{
QTest::qSleep(ms);
}
void Widget::elapsed_msleep(int ms)//no response
{
qDebug() << "elapsed_msleep";
QThread::msleep(ms);
}
void Widget::elapsed_QwaitCondition(int ms)
{
QMutex mutex;
QWaitCondition sleep;
mutex.lock();
sleep.wait(&mutex, ms);
mutex.unlock();
}
void Widget::on_pushButton_clicked()
{
(this->*mE[4])(1000);
}