序
很久很久以前,四年以前,我还是win上的开发,前东家自己实现了一套界面库,使用了MFC + Win32API 来实现的。 那时候还没有接触过Qt,就只能自己维护了,当时是看到了MFC的OnIdle函数。这个函数是利用cpu的空余时间来做一些事儿。现在转到Qt了,还是希望有这个东西。然后搜索资料还是发现一些东西的。
实现1
最简单的方式当然是用一个定时器来实时刷新某个按钮的状态了。这是其中一个方法。这里就不多说了
实现2
刚转Qt的时候,google的时候发现stackoverflow上已经有人实现了,这里贴上具体的方法
这两个函数基本上是最终的实现方法了。 鼠标在applcation中会有对应的事件响应。可以自己看下log,我这里贴上代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAbstractEventDispatcher>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
dispatcher = QAbstractEventDispatcher::instance();
connect(dispatcher, SIGNAL(awake()), SLOT(awake()));
connect(dispatcher, SIGNAL(aboutToBlock()), SLOT(aboutToBlock()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::awake()
{
lastAwake = QTime::currentTime();
qDebug() << "Slept for " << lastBlock.msecsTo(lastAwake) << " msec";
}
void MainWindow::aboutToBlock()
{
lastBlock = QTime::currentTime();
qDebug() << "Worked for " << lastAwake.msecsTo(lastBlock) << " msec";
}