[QT]制作软件级屏保
之前接手的项目中有一个关于屏保的需求是,如果超过30s未进行操作,软件自动进入屏保状态。简单分析一下:所谓未进行操作即是指未接收到键盘或者鼠标事件,超过30s也就是需要用到定时器,屏保状态就是显示一张全屏大图。从QT的角度思考,我们需要创建一个屏保类并且将其做为应用程序的一个事件代理,如果其中有鼠标或者键盘事件,则重新刷新定时器,如果超过30s没有接收到相关事件则全屏显示屏保窗口。以下就着代码实例讲解一下。
构造一个屏保类CScreenSaver:
cscreensaver.h文件
#ifndef CSCREENSAVER
#define CSCREENSAVER#ifndef QOBJECT_H
#include <QObject>
#endifclass QTimer;
class QLabel;
class CScreenSaver : public QObject
{Q_OBJECTpublic:CScreenSaver(QObject *parent = NULL);~CScreenSaver();protected slots:void slot_timeout();protected://初始化屏保参数void init();//事件接收处理函数,由installEventFilter调用方在接收到事件时调用bool eventFilter(QObject *watched, QEvent *event);private://定时器QTimer *timer;//用于显示屏保图片的对象QLabel *label;//初始屏保等待超时时间static const unsigned WAIT_TIME = 30000;
};#endif
cscreensaver.cpp文件
#include <cscreensaver.h>#include <QFile>
#include <QLabel>
#include <QEvent>
#include <QTimer>
#include <QPixmap>
#include <QSettings>CScreenSaver::CScreenSaver(QObject *parent): QObject(parent), waitInterval(WAIT_TIME)
{init();
}CScreenSaver::~CScreenSaver()
{
}void CScreenSaver::init()
{unsigned waitInterval;QString urlPath;//读取屏保配置QSettings settings(QApplication::applicationDirPath() + "/config.ini", QSettings::IniFormat);settings.beginGroup("SCREENSAVER");if (settings.contains("Interval")){bool ok;waitInterval = settings.value("Interval").toUInt(&ok);if (!ok)waitInterval = WAIT_TIME;}if (settings.contains("PicPath")){urlPath = settings.value("PicPath").toString();}settings.endGroup();//设置并启动timer。如果超过30s,则一直显示屏保并不再触发直到再次刷新定时器timer = new QTimer;timer->setSingleShot(true);connect(timer, SIGNAL(timeout()), this, SLOT(slot_timeout()));timer->start(waitInterval);//屏保窗口QRect screenRect = QApplication::desktop()->screenGeometry(0);label = new QLabel();label->setGeometry(screenRect);label->setWindowFlags(Qt::FramelessWindowHint);//拉伸背景图片label->setScaledContents(true);QPixmap pmp;pmp.load(urlPath);label->setPixmap(pmp);label->hide();
}bool CScreenSaver::eventFilter(QObject *obj, QEvent *event)
{//判断事件类型if (event->type() == QEvent::KeyPress || event->type() == QEvent::MouseMove|| event->type() == QEvent::MouseButtonPress) {//有鼠标或键盘事件则重置timertimer->start();label->hide();}return QObject::eventFilter(obj, event);
}void CScreenSaver::slot_timeout()
{//显示屏保label->activateWindow();label->show();
}
main.cpp文件中
#include <QApplication>...
#include <cscreensaver.h>int main(int argc, char *argv[])
{QApplication app(argc, argv);...CScreenSaver screenSaver;//全局接收并委托处理事件app.installEventFilter(&screenSaver);...return app.exec();
}
欢迎访问cuzn小站
[QT]制作软件级屏保相关推荐
- QT制作软件---窗口跟随鼠标进行移动
书接上文,在QT制作软件-去除系统自带的Dialog边框这篇博客中,我们提到了,如果移除系统自带的Dialog窗口会出现当前创建的窗口,无法拖动的情况.即如下图所示: 图1 解决方法:(原理) 要拖动 ...
- QT 制作 gif 录屏 小工具
一.说明: 不断地截取 选中的区域,然后将其制作成 gif 动图. 二.效果图: 1.可设置要录制屏幕的宽高,支持右下角直接拉动改变. 2.可设置变宽的宽度 3.可设置录屏控件的背景颜色 4.可设置录 ...
- java做windows屏保_java编程加载窗口,制作动画(屏保泡泡)
1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...
- 3D屏保JAVA代码_java编程加载窗口,制作动画(屏保泡泡)
1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...
- java编程加载窗口,制作动画(屏保泡泡)
1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test;import java.awt.Frame; import java.awt.Graph ...
- 在Windows XP中制作屏保
在Windows XP中增加了许多个性化设置,就说它的屏保吧,也不再像Win9x那样死板,利用Windows XP的屏保程序我们可以自己制作个性化的屏保,不信请跟我来. id="ad_top ...
- QT制作的软件全屏显示后最小化,点击任务栏图标打开时不是全屏
QT制作的软件全屏显示后最小化,点击任务栏图标打开时不是全屏 前言 用QT做了一个小软件,把它自带的窗口栏给屏蔽了自己搞了关闭和最小化的按钮,且软件打开是全屏显示的.如今遇到的问题是,打开软件全屏显示 ...
- 罗盘时钟制作代码_抖音八卦时钟手机屏保设置方法!
声明:部分内容来源网络 抖音时钟数字罗盘屏保最近十分的火爆, 看上去很有意思也很有趣, 很多人都想要弄. 而抖音时钟数字罗盘屏保如何设置? 今天小编就教大家如何30秒内搞定 其实这个非常的简单, 只要 ...
- flash设置屏保 html,用Flash制作屏保-FlashWiz
当朋友们在网上漫步时,看到那些丰富多采的Flash(动画)时,会不会眼馋?会不会心动?会不会想把它们作为屏幕保护程序来一饱眼福呢?在这里介绍一个把Flash制作成屏幕保护的程序-FlashWiz.Fl ...
最新文章
- Linux下tar.xz压缩解压
- UA SIE545 优化理论基础0 优化建模3 线性回归的参数估计问题
- pandas 中有关isin()函数的介绍,python中del解释
- 早上起床时需要的重力
- Android开发常用工具推荐
- 替代方法_替代化石燃料 科学家找到细菌生产塑料原料的新方法
- 单因素方差分析[转载]
- type=file的未选择任何文件修改_Excel基础—文件菜单之创建保存
- pycharm操作指北
- 前端----HTML
- [ZT]IBM骨灰心得:在你决定购买IBM某个系列前你认真思考过这些吗?
- 内网集群 无法通信_IPSEC连接成功,内网之间却无法互相通信。
- java基础巩固-宇宙第一AiYWM:为了维持生计,单例模式阅读总结【单例模式不同写法、在JDK中的应用】~整起
- 建立牢固的多功能Smartphone应用程序
- 数据结构-----------------------哈希表(最通俗易懂的文章)
- IDEA如何创建带有 webapp 目录的 maven 项目
- 解析单总线协议(1-wire)
- Excel,sumproduct()函数怎么用
- ClickHouse的Projection特性在快手的应用
- php两个数组之间去重,php数组去重、魔术方法、redis常用数据结构及应用场景