Qt for Mac阻止MacOS系统休眠

Qt开发的应用程序如果电脑休眠了会影响软件的使用,因此在软件的使用过程中需要防止电脑休眠,在Win上有专门的API进行处理,在Mac上也必需使用Mac平台自身的API,本篇介绍在Mac平台下使用Qt阻止Mac系统休眠。

要调用Mac系统的API,得需要添加Object- C的语言文件,这里得创建两个文件mactools.h和 mactools.mm的文件

在工程文件中添加Mac的库

mac:{
#    DEFINES += PRODUCTLIBS += -framework IOKitLIBS += -framework CoreFoundationOBJECTIVE_SOURCES += mactools.mmOBJECTIVE_HEADERS += mactools.h#程序图标
#    ICON = logo.icnsVERSION = 2.0.1.1
}

休眠功能代码:

//官方例子用的文字说明
CFStringRef reasonForActivity = CFSTR("QtforMac App");
IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID);

软件退出后,得还电脑原休眠状态

IOReturn success = IOPMAssertionRelease(assertionID);

完整的代码如下:

QtPreventSystemSleep.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
#mac环境配置
mac:{
#    DEFINES += PRODUCTLIBS += -framework IOKitLIBS += -framework CoreFoundationOBJECTIVE_SOURCES += mactools.mmOBJECTIVE_HEADERS += mactools.h#程序图标
#    ICON = logo.icnsVERSION = 2.0.1.1
}SOURCES += \main.cpp \dialog.cppHEADERS += \dialog.hFORMS += \dialog.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

mactools.h

#ifndef MACTOOLS_H
#define MACTOOLS_H/** brief: Mac系统阻止休眠* author:chenyijun* date:  2024-03-17*/class MacTools {
public:bool preventSleep();bool recoverSleep();private:bool isPrevent{false};
};#endif // MACTOOLS_H

mactools.cpp文件

#include "mactools.h"
#import <CoreFoundation/CoreFoundation.h>  //mac头文件
#import <IOKit/pwr_mgt/IOPMLib.h>            //mac头文件
#include <QDebug>
#include <QDateTime>#define PRINTTIME QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss.zzz");IOPMAssertionID assertionID;bool MacTools::preventSleep()
{//限制不重复执行if(isPrevent)return true;//官方例子用的文字说明CFStringRef reasonForActivity = CFSTR("AtomStack Studio");IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID);isPrevent = (success == kIOReturnSuccess);qDebug() << __FUNCTION__ << " isPrevent=============" << isPrevent << assertionID << PRINTTIME;return isPrevent;
}bool MacTools::recoverSleep()
{//执行过才支持取消if(!isPrevent)return true;IOReturn success = IOPMAssertionRelease(assertionID);qDebug() << __FUNCTION__ << " isPrevent=============" << isPrevent << assertionID << PRINTTIME;return success == kIOReturnSuccess;
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>class QTimer;QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();void initData();private:Ui::Dialog *ui;QTimer *m_timer;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QTimer>
#include <QDateTime>
#include <QDebug>//#define PRINTTIME QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss.zzz");Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);this->setWindowTitle("Qt for Mac 阻止系统休眠");initData();
}Dialog::~Dialog()
{delete ui;
}void Dialog::initData()
{QFont font = qApp->font();font.setPixelSize(20);ui->label->setFont(font);ui->label->setStyleSheet("QLabel{background-color:#0000ff;color:#FF0000;}");ui->label->setAlignment(Qt::AlignCenter);m_timer = new QTimer();QObject::connect(m_timer, &QTimer::timeout, [&]() {//QString strTime = QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss");QString strTime = QDateTime::currentDateTime().toString("hh:mm:ss");ui->label->setText(strTime);ui->label->update();qDebug() << "strTime==========================" << strTime;});m_timer->start(1000);
}

main.cpp

阻止系统休眠使用代码

#include "dialog.h"#include <QApplication>#ifdef Q_OS_MAC
#include "mactools.h"
#endifint main(int argc, char *argv[])
{QApplication a(argc, argv);
#ifdef Q_OS_MAC//开启阻止休眠MacTools macTools;macTools.preventSleep();
#endifDialog w;w.show();int ret = a.exec();
#ifdef Q_OS_MAC//程序退出还原系统休眠状态macTools.recoverSleep();
#endifreturn ret;
}

运行:

参考:

Qt Mac阻止和启用休眠_mac休眠api-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关机恶搞小程序的开发程序

关机恶搞小程序的开发程序 目录 关机恶搞小程序的开发程序 一、引言 二、开发思路 三、代码实现 1. 界面设计 2. 关机动画 3. 关机逻辑 4. 恢复功能 5. 异常处理 四、相关术语解释 一、引言 关机恶搞小程序是一种基于C#语言开发的应用程序&#xff0c;旨在通过一些有…

病毒物种注释:多方案

Blastn比对IMG/VR 下载IMG/VR数据库&#xff08;见下面的教程&#xff09; Linux 下载 JGI 的 IMG_VR-CSDN博客 安装Blast&#xff08;这个太简单了&#xff09; gunzip IMGVR_all_nucleotides-high_confidence.fna.gz makeblastdb -in img_vr.fasta -dbtype nucl -out img…

如何用Selenium通过Xpath,精准定位到“多个相同属性值以及多个相同元素”中的目标属性值

前言 本文是该专栏的第21篇,后面会持续分享python爬虫干货知识,记得关注。 相信很多同学,都有使用selenium来写爬虫项目或者自动化页面操作项目。同样,也相信很多同学在使用selenium来定位目标元素的时候,或多或少遇见到这样的情况,就是用Xpath定位目标元素的时候,页面…

html5cssjs代码 023 公制计量单位进位与换算表

html5&css&js代码 023 公制计量单位进位与换算表 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;用于展示公制计量单位的进位与换算表。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"utf-8&quo…

新!PCA+DBO+K-means聚类,蜣螂优化算法DBO优化K-means,适合学习,也适合发paper。

PCADBOK-means聚类&#xff0c;蜣螂优化算法DBO优化K-means&#xff0c;适合学习&#xff0c;也适合发paper。 一、 蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optimizer, DBO…

【5G NR 协议解读】3GPP TS 38.212 (R18) 复用和信道编码(一)

前言 本文基于3GPP TS 38.212 (R18) 复用和信道编码协议。 本文档规定了5G NR的编码、多路复用和物理信道映射。 4 映射到物理信道 4.1 上行链路 表4.1-1规定了上行传输信道到其对应物理信道的映射。表4.1-2规定了上行控制信道信息到其对应物理信道的映射。 Table 4.1-1 T…

微服务的无状态、版本控制向后兼容、流量整型

如何理解微服务的无状态化&#xff1a; 单机Session 如果代码逻辑依赖SessIon中的某个kv 就是有状态的 如果将Session中的kv放在 redis 就成了无状态服务 应用无状态 在线服务扩容或者迁移时 业务不受影响 配置管理有状态&#xff0c; 不同配置文件参数值不同 如何通过接口版…

【开源】SpringBoot框架开发就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

数学建模博弈理论与实践国防科大版

目录 4.博弈模型 4.1.Nash平衡点和帕雷托最优 4.2.囚徒困境 4.3.智猪博弈 4.4.脏脸之谜 5.军事问题数学建模 5.1.兰彻斯特作战模型 5.1.1.一般战斗模型 5.1.2游击战模型 5.1.3.混合战模型 5.2.硫磺岛战役 4.博弈模型 本讲介绍博弈模型&#xff0c;包括博弈论&#x…

关系表示学习与图神经网络

一、关系表示学习与GNN 在社交网络、生物学网络和知识图谱等领域,图结构数据成为了重要的信息表示形式。图结构数据中的节点表示实体,而边表示实体之间的关系。针对这种图结构数据,关系表示学习和图神经网络成为了研究的热点。它们的结合可以用来学习节点和边的表示,并在各…

u盘文件损坏怎么恢复数据?分享三个数据恢复方法

随着科技的飞速发展&#xff0c;U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而&#xff0c;由于各种原因&#xff0c;如不当操作、病毒感染或硬件故障等&#xff0c;U盘中的文件可能会受到损坏。那么&#xff0c;当U盘文件损坏时&#xff0c;我们该如何恢复数据呢…

elasticsearch(RestHighLevelClient API操作)(黑马)

操作全是换汤不换药&#xff0c;创建一个request&#xff0c;然后使用client发送就可以了 一、增加索引库数据 Testvoid testAddDocument() throws IOException {//从数据库查出数据Writer writer writerService.getById(199);//将查出来的数据处理成json字符串String json …

【回归预测】基于DBO-BP(蜣螂优化算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#68】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. BP神经网络2. 蜣螂优化算法3. DBO-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. BP神…

FFmpeg分析视频信息输出到指定格式(csv/flat/ini/json/xml)文件中

1.查看ffprobe帮助 输出格式参数说明: 本例将演示输出csv,flat,ini,json,xml格式 输出所使用的参数如下: 1.输出csv格式: ffprobe -i 4K.mp4 -select_streams v -show_frames -of csv -o 4K.csv 输出: 2.输出flat格式: ffprobe -i 4K.mp4 -select_streams v -show_frames …

玩转C语言——数组初探

一、前言 通过前面的学习&#xff0c;我们已了解C语言的结构变量、分支结构和循环结构。今天&#xff0c;我们一起来认识C语言的另一知识点——数组。先赞后看&#xff0c;养成习惯。 二、数组概念 学习数组&#xff0c;我们要明白数组是什么。在我看来&#xff1a;数组是⼀组…

云服务器2核4G5M配置代表什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么&#xff1f;代表2核CPU、4G内存、5M公网带宽&#xff0c;这是一款轻量应用服务器&#xff0c;系统盘为60GB SSD云硬盘&#xff0c;活动页面 txybk.com/go/txy 活动打开如下图&#xff1a; 腾讯云2核4G5M服务器 如上图所示&#xff0c;这…

练习8 Web [GYCTF2020]Blacklist

这道题其实不是堆叠注入&#xff0c;但是我在联合查询无效后&#xff0c;试了一下堆叠&#xff0c;最后一步发现被过滤的sql语句太多了&#xff0c;完全没法 查阅其他wp的过程[GYCTF2020]Blacklist 1&#xff08;详细做题过程&#xff09; 是用的handler语句&#xff0c;只能用…

cmd常用指令

cmd全称Command Prompt&#xff0c;中文译为命令提示符。 命令提示符是在操作系统中&#xff0c;提示进行命令输入的一种工作提示符。 在不同的操作系统环境下&#xff0c;命令提示符各不相同。 在windows环境下&#xff0c;命令行程序为cmd.exe&#xff0c;是一个32位的命令…

【系统性】 循序渐进学C++

循序渐进学C 第一阶段&#xff1a;基础 一、环境配置 1.1.第一个程序&#xff08;基本格式&#xff09; ​ #include <iosteam> using namespace std;int main(){cout<<"hello world"<<endl;system("pause"); }​ 模板 #include &…

王道c语言ch11-单链表的新建、插入、删除例题

王道c语言ch11-单链表的新建、插入、删除例题 #include <stdio.h> #include <stdlib.h> #define END 33typedef int ElemType;typedef struct LNote {ElemType data;struct LNote *next; } LNote, *LinkList;//头插法 void list_head_insert(LinkList &L) {El…