新建一个工程项目

我们的编程语言里面都有个定时器这样的类或者函数,定时器一般就是设定一个时间间隔,会自动发送一个信号,我们需要处理这个信号,也就是一个槽函数。因为QT是信号和槽的机制。定时操作有很多有用的应用,比如定时关机,可以长时间未操作锁屏,屏保。自动加密等功能,用处还有很多。

我下面实现的是

1.无操作继续运行,点击左键或者右键自动关闭窗口

添加头文件

#include <QMainWindow>
#include <QTimer>
#include <QMouseEvent>
#include <QDebug>

添加函数声明

public:explicit MainWindow(QWidget *parent = 0);~MainWindow();QTimer *timer_;int flag=1;void handle_timeout(void);protected:void mouseMoveEvent(QMouseEvent *event);void mousePressEvent(QMouseEvent *event);

添加.cpp代码

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);timer_ = new QTimer(this);connect(timer_,&QTimer::timeout,this,&MainWindow::handle_timeout);timer_->start(1000); //开启定时,1秒(1000毫秒)发送一个超时信号
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::handle_timeout()
{if(flag==1){timer_->stop();     //停止定时器timer_->start(1000); //开启定时器
//        flag=0;qDebug() <<"flag" << QString::number(flag,10);}if(flag==0){qDebug() <<"flag" << QString::number(flag,10);this->close();}
}void MainWindow::mouseMoveEvent(QMouseEvent *event)
{qDebug() << "move";}void MainWindow::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){flag = 0;qDebug() << "按下左键";}if(event->button() == Qt::RightButton){flag = 0;qDebug() << "按下右键";}
}

演示

按左键退出,响应时间1秒

flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "0"

按右键退出,响应时间1秒

flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下右键
flag "0"

上面当flag为1时,一直定时1S发送信号,不做处理,只打印出当前flag的值,当按下左键或者右键时,flag的值变为0,过了一秒钟,定时器发送信号,然后进行处理信号,在handle_timeout函数中,判断flag等于0时,打印flag的值为0,紧接着关闭窗口。

2.延长关闭时间

我们来改改,将点击后的时间延长点,这么来说我们需要添加一个变量,这个变量是用来记录在flag为0时候,发送信号的次数。当达到或超过记录的次数时,进行关闭窗口。

添加变量声明

 public:int time_num=0;

修改.cpp代码

void MainWindow::handle_timeout()
{if(flag==1){timer_->stop();timer_->start(1000);//        flag=0;qDebug() <<"flag" << QString::number(flag,10);}if(flag==0){time_num+=1;qDebug() <<"flag" << QString::number(flag,10);if(time_num >=10){this->close();}}
}

演示

按下左键后10S关闭

flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "0"
flag "0"
flag "0"
flag "0"
flag "0"
flag "0"
flag "0"
flag "0"
flag "0"
flag "0"
关闭

3.添加启动之后10S自动关闭

现在我们再改改,让它开启之后10S自动关闭,如果按下左键右键重新计时,再过10S自动关闭

我们改两个地方,其余不变

改处理超时函数

void MainWindow::handle_timeout()
{if(flag==1){qDebug() <<"flag" << QString::number(flag,10);time_num+=1;timer_->stop();timer_->start(1000);if(time_num>=10){flag=0;}}if(flag==0){qDebug() <<"flag" << QString::number(flag,10);qDebug() << "关闭";this->close();}
}

改鼠标事件函数

void MainWindow::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){flag = 1;time_num=0;qDebug() << "按下左键";}if(event->button() == Qt::RightButton){flag = 1;time_num=0;qDebug() << "按下右键";}
}

演示

flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "1"
flag "1"
flag "1"
按下右键
move
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
按下左键
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "1"
flag "0"
关闭

4.我们来区分一下,定时器停止与停止后开启的效果

我们修改一下只需要修改一下处理超时函数handle_timeout就可以了,这次我们不点击左右键。

定时器停止

void MainWindow::handle_timeout()
{if(flag==1){qDebug() <<"flag" << QString::number(flag,10);timer_->stop();qDebug() << "停止";
//        timer_->start(1000);}if(flag==0){time_num+=1;qDebug() <<"flag" << QString::number(flag,10);if(time_num >=10){qDebug() << "关闭";this->close();}}
}

演示

flag "1"
停止

我们可以看到,打印了一次flag就停止了,效果很明显。

下面我们停止后开启定时。

void MainWindow::handle_timeout()
{if(flag==1){qDebug() <<"flag" << QString::number(flag,10);timer_->stop();qDebug() << "停止";timer_->start(1000);qDebug() << "开启";}if(flag==0){time_num+=1;qDebug() <<"flag" << QString::number(flag,10);if(time_num >=10){qDebug() << "关闭";this->close();}}
}

演示

flag "1"
停止
开启
flag "1"
停止
开启
flag "1"
停止
开启
flag "1"
停止
开启
flag "1"
停止
开启
flag "1"
停止
开启
flag "1"
停止
开启

我们可以看到,停止后开启,定时发送。正常

【QT】QT Qtimer定时的使用 含屏保功能实现,鼠标无操作后处理事件相关推荐

  1. 西门子精彩屏+精简屏+精智屏设置屏保功能的具体方法和步骤

    精彩屏+精简屏+精智屏设置屏保功能的具体方法和步骤 精彩Smart屏设置屏保: Smart屏支持屏保功能,但是不能自定义屏保,只能使用屏中自带的屏保,并且仅可置屏保等待时间.设置步骤如下: 1.从触摸 ...

  2. 关闭wps2019的屏保功能

    有时在上传或下载比较大的文件的时候,往往会离开一会儿,但是wps2019会自动启动画报中心的屏保,影响下载.如何关闭屏保功能呢? 1.点击"更多"按钮: 2.点击"WPS ...

  3. Android 11.0 Settings增加屏保功能(屏保时间必须小于休眠时间)

    1.概述 在11.0的定制化产品的需求的需要 要求增加屏保功能,设置屏保前提必须是是需要设置休眠时间大于屏保时间,当屏保时间大于休眠时间时,休眠以后 屏保功能就无效,所以就必须设置好屏保时间 最终效果 ...

  4. Android 给App加上屏保功能 类似广告功能的实现。

    一朋友的所做的app中需要每个activity在用户30秒没有任何操作的时候,弹出一个屏保,屏保保持是屏幕长亮,屏保上面可以实现广告啊什么的等等.于是就写了个小demo,基本差不多都实现了,只需要改改 ...

  5. android中屏保功能项目,【Android】一段时间不操作弹出【屏保】效果

    仿屏保效果 最近项目的一个小Demo,和大家分享一下,本篇文章主要展示的是一个仿屏保的效果,用户在一段时间不操作会自动弹出屏保页面,当处于屏保页面的时候,[两秒内连续]按两次键盘[回车键]就会退出屏保 ...

  6. 边学边用C/C++实现定时关机炫酷屏保系统!

    很久之前就了解了c语言有system("shutdown -s -t xx");定时关机功能.VC++ 6.0 定时关机,设置时间,自动关机,时间以分钟计,在确定使用本功能前,请确 ...

  7. T5L串口屏界面开机动画、动态屏保的设置原来如此简单

    T5L_DGUS屏封装了DGUS图片动画控件功能,支持开机自动播放动画,常应用于终端Logo的动态展示:支持动态屏保功能,可设置定时长无触控进入屏保,也可触摸进入屏保或退出屏保,常应用于终端炫酷显示的 ...

  8. win7屏保怎么设置_酷屏保怎么设置?酷开系统不可不知的玩法!

    数码相框,在过去一段时间里很多客厅.卧室都摆放过,时至今日也还有部分家庭仍然使用播放平日的数码照片.今天编辑给大家推荐一款不一样的超大版的"数码相框"--酷开系统7.0内置的酷屏保 ...

  9. linux6.5取消屏保,怎么把wps屏保关掉

    1. 如何关掉最新wps屏保 1.打开WPS2019,点击左上角的WPS标签 2.点击应用中心的更多,打开应用中心窗口 3.在应用中心中,找到"WPS画报",点击进入 4.点击左侧 ...

最新文章

  1. Codeforces Round #104 (Div. 2) E DP(01背包模型) +组和+除法取模求逆元
  2. Horticulture Research 模式图的手稿
  3. 2021-01-07 Python Opencv转换颜色空间 RGB转为HSV
  4. 前苹果副总裁:20-40-60法则
  5. NioEventLoop加载流程分析
  6. mysql-in关键字,分组查询,分页查询
  7. [汇编语言]常用命令
  8. Android查看web日志,详解Android WebView监听console错误信息
  9. 原python最简单的图形编程_Python(简单图形和文件处理)编程
  10. Android学习小Demo(10)ToDoList的改进版之ViewPager显示多个图片
  11. 读吴恩达算-EM算法笔记
  12. 电容电感充放电时间计算
  13. SQLExpress数据库类型与AttachDbFilename用法
  14. 《BDD100K: A Diverse Driving Dataset for Heterogeneous Multitask Learning》论文阅读笔记
  15. python报错: list object has no attribute shape的解决
  16. 开源帮助:什么是退出代码 137,你能修复它吗?
  17. Xshell怎样才能实现快速粘贴复制
  18. element-ui轮播图片显示问题
  19. android 绑定布局,android – 在数据绑定中设置动态布局高度
  20. 微信小程序中通过Basic Auth传递token

热门文章

  1. 理解计算:从√2到AlphaGo ——第1季 从√2谈起
  2. Word2016添加mythtype加载项
  3. 安川机器人编程加电弧_安川MOTOMAN焊接机器人编程
  4. putty怎么查看MySQL密码_putty mysql修改密码
  5. 你的自杀指数又是多少?
  6. 易驾佳智能机器人教练_用RoboCoach代替驾校教练 易驾佳欲用AI技术改变驾培
  7. 2018目标跟踪算法综述
  8. 关于计算机在教室的文化建设方案,聊城大学教学楼、教室文化建设指导方案
  9. intel编译器编译cp2k
  10. 时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测