Qt来实现MFC的OnIdle效果

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

文章作者: 张小飞
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 张小飞 !
 上一篇
QThread线程官方的推荐的写法 QThread线程官方的推荐的写法
序直接重写QThread是没有问题的,但是重写QThread这种方式不太灵活,对于重写的Thread来讲,只有run函数才会在新的线程中。对于重写的QThread是可以带出来对应的数据得,但是自己响应自己的槽函数的话,就不太灵活了,Qt的老
下一篇 
Ubuntu 20.04的镜像 Ubuntu 20.04的镜像
https://mirror.bjtu.edu.cn/ubuntu-releases/20.04/
2020-06-29
  目录