前言

作为非专业业余程序员,天天做电脑面前很累。五一劳动节看了一篇帖子说,劳动时间越长,越放弃思考,为了放松自我,写一个桌面小程序,按时提醒自己休息

设计功能

启动程序开始计时,每50分钟提醒休息10分钟,这样一天8小时,能休息80分钟,想想就开心。

搭建程序框架

  • 新建项目,使用widget作为主窗口
  • 在widget里嵌入quickWidget作为主界面
  • 创建资源文件,main.qml文件
  • 设置quickWidget的source为main.qml

配置程序图标

在pro里写 RC_FILE += myapp.rc
myapp.rc文件内容

IDI_ICON1               ICON    DISCARDABLE     "logo.ico"

背景透明

setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint | Qt::SubWindow | Qt::FramelessWindowHint);//背景透明setAttribute(Qt::WA_TranslucentBackground);//填充背景setAutoFillBackground(true);//画刷QPalette palette;QPixmap pixmap("qrc:/toumingBg.png");palette.setBrush(QPalette::Window, QBrush(pixmap));setPalette(palette);//qml透明ui->quickWidget->setClearColor(QColor(Qt::transparent));

效果,注意红边框

系统托盘

因为程序没有右上角关闭按钮,任务栏图标也去掉了,所以无法关闭程序。因此在系统托盘加个图标,象qq那样,很不错的主意

trayIcon = new QSystemTrayIcon();trayIcon->setIcon(QIcon(":/logo.ico"));QMenu *menu = new QMenu();QAction *action = menu->addAction("退出");connect(action, &QAction::triggered, this, &Widget::systemExit);trayIcon->setContextMenu(menu);trayIcon->show();

闪烁

正常窗口第一次显示时候会闪现出来,有背景存在所以不会察觉,但是我们的界面是透明,所以第一次闪烁非常非常明显,我没有找到好的方法解决这个问题,投机取巧了一下,效果出奇的好

setFixedSize(1,1);
QTimer::singleShot(1000, this, &Widget::init);void Widget::init()
{setWindowState(Qt::WindowMaximized);
}

全屏黑屏

设置窗口全屏后黑屏,进行下面设置发现不黑屏,原因不明,全屏有毒。。。

void Widget::init()
{setWindowState(Qt::WindowMaximized);setGeometry(0,0,QApplication::desktop()->width(),QApplication::desktop()->height()+1);
}

接下来终于到了实现业务逻辑的部分了,真不容易。

  • timer实现计时,达到50分钟后显示窗口,黑布下滑遮盖桌面,
  • 动画结束后,timerMin计时10分钟内时间流逝
  • 10分钟过去后,黑布上拉,重新开始timer计时
  • 动画结束,窗口隐藏
   Timer{id: timerinterval: 1000repeat: truerunning: trueonTriggered: {var currentDate = new Date//秒到达50*60if(currentDate-lastDate > workTime*1000){widget.show()animDown.restart()}}}ParallelAnimation{id: animDownPropertyAnimation{ target: rect; property: "y"; from: -Screen.height; to: 0; easing.type: Easing.Linear; duration: 500}onStopped: {lastMinDate = new DatemyTime = myTimeTexttimerMin.restart()timer.stop()}}Timer{id: timerMininterval: 500repeat: trueonTriggered: {var currentDate = new Date//流逝的时间var timeLapse = Math.floor(currentDate-lastMinDate) / 1000if(restTime-timeLapse>=0){var left = (restTime-timeLapse)var min = Number(left/60).toFixed(0)var sec = Number(left%60).toFixed(0)myTime = addZero(min) + ":" + addZero(sec)}else{lastDate = currentDatetimerMin.stop()animUp.restart()timer.restart()}}}ParallelAnimation{id: animUpPropertyAnimation{ target: rect; property: "y"; from: 0; to: -Screen.height; easing.type: Easing.Linear; duration: 500}onStopped: {widget.hide()}}

注册开机启动

花了一下午时间,经历了N多坑

  • QSettings设置注册表好简单啊——然并软
  • Win Api有啥方法——RegOpenKeyEx,RegSetValueEx,RegCloseKey
  • 为啥编译失败——该api需要添加lib
  • 为啥windows.h不好用——可能需要qt_windows.h
  • QString咋转LPCWSTR——TEXT()
  • 都写入成功了,为啥看不到——需要添加管理员权限
  • 普通注册表为啥写入乱码啊,unicode编码转成ANSI编码再转LPBYTE
  • 值终于对了,应用名怎么只剩一个字母了——QString转LPCSTR
  • 开机启动写成功了,注册表怎么还没有——开机启动项有就行了

福利

源代码下载
程序包下载,把bin文件夹下载下来哦

第二天

注册开机启动,QSettings其实好用,

void Widget::autoRun(bool run)
{QString path = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";QString exePath = QApplication::applicationFilePath();exePath = exePath.replace("/", "\\");QSettings *reg = new QSettings(path, QSettings::NativeFormat);if(run){reg->setValue("rest", exePath);}else{reg->setValue("rest", "");}
}

总结

qt下修改注册表,推荐用QSettings,很方便

  • 64位系统有重定向问题,真正的默认开机启动项在
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run

qt桌面应用-闹钟提醒相关推荐

  1. 用C++编写桌面闹钟提醒程序,这个功能你不用就亏了!

    随着日程事务的增多,一款优秀的定时提醒程序必定可以帮助你合理安排工作.处理紧急事件,甚至规划休息时间等等,现在定时提醒软件的功能也趋向于多元化,除了传统的提醒功能,还会自带记事本.日程管理等常用功能! ...

  2. android 闹钟定时提醒,安卓手机便签怎么设定三天后的闹钟提醒?

    原标题:安卓手机便签怎么设定三天后的闹钟提醒? 大家在使用安卓手机便签时,不知道怎么使用闹钟设置时间提醒,尤其是三天以后的提醒设置,更不知该如何下手.接下来,小编用云便签教大家如何在安卓手机上设置三天 ...

  3. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  4. android闹钟提醒

    在android上做出一个闹钟提醒功能http://www.apkbus.com/android-1807-1-1.html 转载于:https://www.cnblogs.com/xubuhang/ ...

  5. Win7系统便签怎样设置一个闹钟提醒

    Win7系统便签怎么设置一个闹钟提醒呢?在便签上设置提醒事项,还可以确定任务完成时间,让每一项任务都在规定时间内完成,杜绝拖延快速完成工作.想要在便签上设置提醒,首先要有一款会提醒的便签,还要了解在该 ...

  6. 桌面linux imx6q,SAIL-IMX6Q添加qt桌面应用程序

    添加qt桌面应用程序比较繁琐,提起来大家都是相当头疼的一块项目,经过我一系列的摸索,终于学会了用imx6添加qt桌面应用程序. 文件夹设置存放在:/usr/share/matchbox/vfolder ...

  7. 手机上哪款闹钟提醒APP好

    相信有不少小伙伴都有这样的烦恼,随着进入职场工作的时间越来越久,每天要完成的各种事情很多,这一件件琐碎的待办事项非常容易被忽略或忘记.如果没有一个负责的"秘书"来定时提醒我们哪个时 ...

  8. 怎么设置桌面提醒任务,好用的桌面便签提醒工具

    上班族每天的工作任务很多,全凭脑子记忆恐怕是很费劲的.如果有一个桌面提醒任务软件,可以记录下当天的工作任务,并设置指定时间,提醒自己在特定时间做事.有人喜欢用便签来设置任务提醒,那么好用的桌面便签有哪 ...

  9. win7系统下比较好用的桌面日程安排提醒软件是什么?

    win7系统下比较好用的桌面日程安排提醒软件是什么? win7系统的电脑上可以将便笺添加到桌面,用来记录待办事项.安排任务清单,虽然系统便笺能起到日程安排的作用,但是却不能进行直观的日程提醒.win7 ...

最新文章

  1. 1048 Find Coins(two pointers解法)
  2. Linux上调整sshd进程的优先级
  3. 【Flutter】ExpansionTile 可折叠列表
  4. MySQL 最新8.0版本windows系统下数据库的安装、配置与使用实例演示,客户端使用ip连接数据库失败问题处理
  5. 乞丐版HTML5播放器
  6. wine 运行Adobe Audition 3.0方法
  7. SAP Spartacus lock focus Directive的工作原理示意图
  8. idea 不打开文件提示错误_IDEA无法正常启动(打不开报错)
  9. linux报文高速捕获技术对比--napi/libpcap/afpacket/pfring/dpdk/xdp
  10. Via板载声卡底噪严重、播放卡顿及耳机与扬声器音源切换问题【解决方法】
  11. LeetCode 285. 二叉搜索树中的中序后继
  12. freemarker导出Word文档并在其中插入图片
  13. 普林斯顿算法课作业 part II 的python实现(四)Boggle
  14. 鸿蒙OS平板界面,华为鸿蒙OS平板操作界面曝光,华为MatePad Pro2,搭载麒麟9000
  15. python vbs_python和vbs
  16. Flutter组件--GridView使用详情
  17. windows删除文件夹提示找不到该项目
  18. Android的版本更新
  19. python制作定时发送信息脚本
  20. TP4333移动电源芯片

热门文章

  1. 只需六步,解决数据分析思路问题
  2. 关于GDP和GNP的概念
  3. GT820M显卡使用CUDA的“no kernel image is available for execution on the device”问题解决
  4. 华为防火墙双机热备技术:HRP、VGMP、VRRP,三大技术值得一学!
  5. jenkins无法停止构建任务stop_abort, 部署失败Deploy
  6. 白鹭引擎能用java吗_白鹭引擎开发3D项目(一)
  7. 基于Python制作的消消乐小游戏
  8. 阿里云服务器快速搭建网站(官网教程)
  9. linux手机壳,我做手机壳特好看
  10. Matplotlib 绘图教程(3D)