Qt来实现MFC的OnIdle效果.md

发布于 23 天前  120 次阅读


很久很久以前,四年以前,我还是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";
}

欢迎关注我的小程序,小程序内容与网站自动保持同步

欢迎关注我的微信公众号,本网站所有的文章以及更新以后都会手动同步到微信公众号上。


公交车司机终于在众人的指责中将座位让给了老太太