Qt实现屏保功能,鼠标一定时间无响应程序进入待机状态
来源:互联网 发布:tizen软件下载 编辑:程序博客网 时间:2024/05/16 08:00
最近使用Qt实现类似与屏保的功能,当鼠标在一定时间内一直停留在一个位置的时候,程序会自动切入到其他界面(用于显示一些信息),当鼠标移动的时候,屏幕切换回来,效果类似于屏幕保护。
实现想法如下:
想法一:
继承QApplication类,重写
bool Application::notify(QObject *obj, QEvent *e)函数,获取QEvent,如果是鼠标移动事件,就将定时器停止,否则就启动定时器,当定时器到达一定时间的时候,触发槽事件,切换屏幕。
在启动定时器的时候要注意,首先要判断定时器是否已经启动了,如果已经启动了,就不要重复启动了。
还需要定义一个函数
void Application::setWindowInstance(FullScreenWindow *wnd)在main.cpp里面将定义的窗体传进来,这样就能对窗体进行操作了,并且可以绑定信号和槽了,在这里我的槽函数是在窗体的cpp里面实现的。
代码如下:
main.cpp
#include <QtGui/QApplication>#include "fullscreenwindow.h"#include "application.h"int main(int argc, char *argv[]){ Application a(argc, argv); FullScreenWindow w; a.setWindowInstance(&w); w.show(); return a.exec();}application.h
#ifndef APPLICATION_H#define APPLICATION_H#include <QApplication>#include <QDebug>#include "fullscreenwindow.h"#include "qtimer.h"class Application : public QApplication{public: Application(int & argc, char ** argv); bool notify(QObject *, QEvent *); void setWindowInstance(FullScreenWindow* wnd);private: FullScreenWindow* window; //保存一个你窗体的指针 QTimer *timer;};#endif // APPLICATION_H
application.cpp
#include "application.h"Application::Application(int &argc, char **argv) : QApplication(argc,argv) , window(0){ //新建一个QTimer对象 timer = new QTimer(); //设置定时器每个多少毫秒发送一个timeout()信号 timer->setInterval(10000); //启动定时器 timer->start();}void Application::setWindowInstance(FullScreenWindow *wnd){ window = wnd; //信号和槽 connect(timer, SIGNAL(timeout()), wnd,SLOT(onTimerOut()));}bool Application::notify(QObject *obj, QEvent *e){ if(e->type() == QEvent::MouseMove) { if(window) { timer->stop(); qDebug()<<"stop"; window->resize(500,500); //调用你窗体相应的函数 } } else { if(!timer->isActive()) { timer->start(); qDebug()<<"start"; } } return QApplication::notify(obj,e);}
fullscreenwindow.h
#ifndef FULLSCREENWINDOW_H#define FULLSCREENWINDOW_H#include <QMainWindow>namespace Ui { class FullScreenWindow;}class FullScreenWindow : public QMainWindow{ Q_OBJECTpublic: explicit FullScreenWindow(QWidget *parent = 0); ~FullScreenWindow();private: Ui::FullScreenWindow *ui;private slots: void onTimerOut();};#endif // FULLSCREENWINDOW_H
fullscreenwindow.cpp
#include "fullscreenwindow.h"#include "ui_fullscreenwindow.h"FullScreenWindow::FullScreenWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::FullScreenWindow){ ui->setupUi(this);}FullScreenWindow::~FullScreenWindow(){ delete ui;}void FullScreenWindow::onTimerOut(){ this->resize(900,900);}
实现的效果是:界面开始的时候窗体大小400*300,鼠标移动的话就变成了500*500,如果鼠标10s不动,窗体大小变成900*900,当然,你也可以在onTimeOut函数中实现窗体的切换操作,那就是屏保效果啦。
下载程序
想法二:
使用定时器(1s)和计数器,窗体声明的时候获取当前鼠标位置(x,y),当定时器时间到的时候再次获取鼠标位置(x1,y1),如果鼠标位置改变,那就说明这1s内鼠标移动了,计数器清零,如果鼠标位置不变,那计数器就+1,直到计数器到达一定数量,表示鼠标这段时间没有移动,那就进入切换界面操作,当然,这种做法不是十分科学,有可能在1s之内鼠标动了又移回到之前的位置(一个像素也不差),这种情况没法判断的,但是这种情况手工发生几率不大。
总结:
想法一实现的过程中遇到以下问题:当鼠标不在当前界面上时,或者界面最小化时,程序会当成鼠标未移动,也就是说此时你移动鼠标,到达时间时,也会进入屏保程序,所以Application里面获取的QEvent中的MouseMove指的是在程序界面上的鼠标移动。目前这个问题还是没有解决,期待大神解答。
1 0
- Qt实现屏保功能,鼠标一定时间无响应程序进入待机状态
- Qt实现屏保功能,鼠标一定时间无响应程序进入待机状态
- Android系统进入待机状态,鼠标滑动不唤醒,点击右键唤醒
- Qt实现屏保
- 汇编实现屏保功能
- win7怎样让待机设置禁止进入待机状态
- 让机器进入待机或休眠状态
- HLT 使CUP进入待机状态
- iOS里实现类似屏保的功能 一段时间没有操作后 自动进入图片浏览
- QT鼠标响应
- 利用命令行让Windows进入待机(stand by)状态
- App运行时iPhone不会进入锁屏待机状态
- JavaScript实现无操作后屏保效果
- 用Qt写的简单屏保程序
- 自学QT之QML实现响应鼠标和键盘事件
- 【转】在 QTableWidget 部件上实现鼠标右键响应功能
- NGUI 鼠标停留UI上时缓慢显示子Item,当无停留超过一定时间后回到原地
- QT鼠标点击响应事件
- C# 加密小工具代码实现
- 第3周 分布式文件系统HDFS原理与操作
- PF_RING实现分析
- 《数据结构和Java集合框架第三版》读书笔记(十二)快速排序
- bzoj1660栈
- Qt实现屏保功能,鼠标一定时间无响应程序进入待机状态
- BLOCK方式实现OC程序中多个页面判定用户是否登录
- 定义跨平台的数据类型
- C#网络编程(异步传输字符串) - Part.3
- synchronized详解(二)
- Android高效加载大图、多图解决方案,有效避免程序OOM
- find the nth digit(数论)
- synchronized详解(三)
- 国外人对Qt的评价