QT调节屏幕亮度

1、目标

利用QT实现调节屏幕亮度功能:在无屏幕无触控时,将屏幕亮度调低,若有触控则调到最亮。

2、调节亮度命令

目标装置使用嵌入式Linux系统,调节屏幕亮度的指令为:

echo x > /sys/class/backlight/backlight/brightness #x范围为0~10

利用终端执行此命令是没有问题的。不过,采用QProcess执行这个命令时,怎么都不响应,也不提示任何错误信息。

最终发现要采用这样的命令:

/bin/sh -c "echo x > /sys/class/backlight/backlight/brightness" #x为亮度值

程序代码实现如下:

QProcess setBright(this);// 进程函数,调用外部指令窗口
setBright.start("cat /sys/class/backlight/backlight/brightness \n"); #获取当前亮度值
setBright.waitForFinished(); // 等待命令执行完成
QString strCmd = QString("/bin/sh -c \"echo %1 > /sys/class/backlight/backlight/brightness\"").arg(brightness/10);
//执行指令
setBright.start(strCmd.toLocal8Bit().data());   //convert QString to char
setBright.waitForFinished(1000);// 等待指令执行完毕
QString strErrors = setBright.readAllStandardError();// 获取返回值
qDebug()<<strErrors;

3、检测触控/鼠标事件唤醒屏幕

3.1、功能说明

若一段时间没有点击屏幕,则调暗或熄灭屏幕。如果有触控(即鼠标按下/移动)事件,则唤醒点亮屏幕。

3.2、有窗口时的实现方法

有窗口时,实现比较简单。在窗口控件类中实现鼠标事件响应即可。示例代码如下:

//h
protected:void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);
//cpp
void MainWindow::mousePressEvent(QMouseEvent *event)
{qDebug() << "Mouse pressed";mScreenSleep->ToWake();    //唤醒屏幕
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{qDebug() << "Mouse moved";mScreenSleep->ToWake();    //唤醒屏幕
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{qDebug() << "Mouse released";mScreenSleep->ToWake();    //唤醒屏幕
}

注意:只能在窗口控件内响应鼠标事件。可使用QApplication类来响应窗口控件外的事件。

问题:窗口全屏且设置为透明时,若屏幕熄灭后无法点亮。

3.3、无窗口时的实现方法

3.3.1、利用QApplication类函数实现

示例代码如下:

//h
#ifndef GLOBALAPP_H
#define GLOBALAPP_H#include <QApplication>
#include "screensleep.h"    //屏幕亮度控制类class globalapp : public QApplication
{
public:globalapp(int &argc,char **argv);~globalapp();ScreenSleep *mScreenSleep;bool notify(QObject*, QEvent *);
};#endif // GLOBALAPP_H//cpp
#include "globalapp.h"
#include <QDebug>globalapp::globalapp(int &argc,char **argv):QApplication(argc,argv)
{mScreenSleep    = new ScreenSleep(this);
}
globalapp::~globalapp()
{delete  mScreenSleep;
}
bool globalapp::notify(QObject *obj, QEvent *e)
{if(e->type() == QEvent::KeyPress || e->type() == QEvent::MouseButtonPress ||  e->type() == QEvent::MouseMove){mScreenSleep->ToWake();}else if(e->type() == QEvent::SockAct) //为什么响应的是这个事件???{mScreenSleep->ToWake();}return QApplication::notify(obj,e);
}
//main
int main(int argc, char *argv[])
{globalapp a(argc, argv);    //使用自建的QApplication对象return a.exec();
}

3.3.2、利用事件过滤器函数

示例代码如下:

#include <QApplication>
#include <QMouseEvent>
#include <QDebug>class MouseHook : public QObject {bool eventFilter(QObject *obj, QEvent *event) override {if (event->type() == QEvent::MouseMove) {QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);//放置事件处理}else if(event->type() == QEvent::SockAct){QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);//放置事件处理}return QObject::eventFilter(obj, event);}
};
int main(int argc, char *argv[])
{MouseHook mouseHook;a.installEventFilter(&mouseHook);return a.exec();
}

从上面的注释中也看到了,无窗口时,鼠标点击或触控事件并不等于QT定义的鼠标事件,而是一个QEvent::SockAct事件!

至于为什么是这个,还未找到原因,但这是个大坑啊!

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

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

相关文章

Linux开机自启动连接wifi

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f525; 系列专栏&#xff1a;Linux &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到我的代码世界~ &#x1f601; 喜欢的…

【技术支持】npm镜像设置

临时设置 npm install <package> --registryhttps://registry.npmmirror.com/永久设置 npm config set registry https://registry.npmmirror.com/获取设置值 npm config get registry退回官方 npm config set registry https://registry.npmjs.org/

P8306 【模板】字典树

题目描述 给定 n 个模式串 s1​,s2​,…,sn​ 和 q 次询问&#xff0c;每次询问给定一个文本串 ti​&#xff0c;请回答 s1​∼sn​ 中有多少个字符串 sj​ 满足 ti​ 是 sj​ 的前缀。 一个字符串 t 是 s 的前缀当且仅当从 s 的末尾删去若干个&#xff08;可以为 0 个&#…

Kubernetes管理神器-插件管理器Krew

Kubernetes管理神器-插件管理器Krew Krew是Kubernetes的一个插件管理器&#xff0c;它允许用户搜索、安装和管理kubectl插件。通过Krew&#xff0c;用户可以方便地扩展kubectl的功能&#xff0c;使用社区提供的各种插件。 类似于apt,dnf,brew等工具&#xff0c;截至目前&…

环境快照:精通Conda中的conda env export命令

环境快照&#xff1a;精通Conda中的conda env export命令 引言 在科学计算和软件开发中&#xff0c;能够准确地复制和共享工作环境是至关重要的。Conda提供了conda env export命令&#xff0c;允许用户导出当前环境的配置&#xff0c;包括已安装的包及其版本。这使得环境的复…

2.贪心算法.基础

2.贪心算法.基础 基础知识题目1.分发饼干2.摆动序列3.最大子序和4.买股票的最佳时机24.2.买股票的最佳时机5.跳跃游戏5.1.跳跃游戏26.K次取反后最大化的数组和7.加油站8.分发糖果 基础知识 什么是贪心? 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪…

【代码随想录算法训练Day63】最小生成树算法

Day63 图论第七天 prim算法 #include<iostream> #include<vector> #include <climits>using namespace std; int main() {int v, e;int x, y, k;cin >> v >> e;// 填一个默认最大值&#xff0c;题目描述val最大为10000vector<vector<int…

面试经典 106. 从中序与后序遍历序列构造二叉树

最近小胖开始找工作了&#xff0c;又来刷苦逼的算法了 555 废话不多说&#xff0c;看这一题&#xff0c;上链接&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/?envTypestudy-plan-v2&envIdtop-inte…

Linux-磁盘空间不足的清理步骤(详细版本)

当 Linux 服务器出现 “no space left on device” 错误时,意味着磁盘空间已满,需要采取一些措施来清理磁盘,可以根据下面步骤依次清理: 1. 检查磁盘使用情况 首先,使用 df 和 du 命令检查磁盘使用情况,找出哪些目录占用了大量空间。 可以通过如下命令来查询 df -h举例…

将ceph中的submodule转化为正常文件提交到内部仓库中

将ceph中的submodule转化为正常文件提交到内部仓库中 1、问题 ceph 的submodule经常下载不下来导致编译打包都困难&#xff0c;如果有一个方法将submodule下载下来然后直接放到仓库中&#xff0c;以免每次都需要重新clone了。这时发现另外一个问题&#xff0c;submodule没有被…

CentOS 8升级gcc版本

1、查看gcc版本 gcc -v发现gcc版本为8.x.x&#xff0c;而跑某个项目的finetune需要gcc-9&#xff0c;之前搜索过很多更新gcc版本的方式&#xff0c;例如https://blog.csdn.net/xunye_dream/article/details/108918316?spm1001.2014.3001.5506&#xff0c;但执行指令 sudo yu…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

纳米级材料尺寸如何测量?

在纳米显微测量领域&#xff0c;基于纳米传动与扫描技术、白光干涉与高精度3D重建技术、共聚焦测量等技术积累&#xff0c;具有自主知识产权的白光干涉仪&#xff08;Z向分辨率可高达0.1纳米&#xff09;和共聚焦显微镜&#xff0c;广泛应用于半导体、3C电子、高校科研等行业领…

VMware安装centos9详细教程(保姆级)

前言 centos9最新的centos版本&#xff0c;在近期的使用中发现它的操作界面与以往的centos7/8更加舒适&#xff0c;界面优化更加精细 项目终止日期&#xff08;EOL&#xff09; 从公告可知&#xff0c;CentOS 项目重心从 CentOS Linux 转移到了 CentOS Stream。下面是各个项…

机场公厕厕位指引屏,布线简单,安装便捷

在人潮涌动的机场&#xff0c;公厕不仅是旅客的必需设施&#xff0c;更是衡量机场服务质量的重要指标。然而&#xff0c;传统机场公厕往往存在信息不透明、清洁维护滞后、高峰期拥挤等问题&#xff0c;严重影响了旅客的使用体验。近年来&#xff0c;随着智慧机场理念的兴起&…

【方法】如何打开设置了密码的ZIP文件?

对于重要的ZIP文件&#xff0c;很多人会设置密码保护&#xff0c;那要如何打开设置了密码的ZIP文件呢&#xff1f;今天我们一起来看下&#xff0c;在记得密码和忘记密码的情况下&#xff0c;如何打开ZIP文件。 情况1&#xff1a; 如果知道ZIP文件原本设置的密码&#xff0c;我…

Excel第28享:如何新建一个Excel表格

一、背景需求 小姑电话说&#xff1a;要新建一个表格&#xff0c;并实现将几个单元格进行合并的需求。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“XLS工作表”或“XLSX工作表”都可以&#xff0c;如下图所示。 之后&…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会&#xff0c;你肯定注意到了他们今年发布的 Astra&#xff0c;一个人工智能体&#xff08;AI Agent&#xff09;。事实上&#xff0c;目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体&#xff08;AI …

Mysql数据库两表连接进行各种操作

一&#xff0c;创建两个表emp和dept&#xff0c;并给它们插入数据 1.创建表emp create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; 2.创建表dept create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) cha…

使用 Python Schedule 库进行任务调度

文章目录 简介Schedule 库的原理安装 Schedule基本用法导入 Schedule定义任务调度任务运行调度器 调度选项每分钟执行一次任务每小时执行一次任务每天执行一次任务每周特定时间执行任务每特定时间间隔执行任务按条件执行任务 高级用法异步任务多任务调度动态任务调度 优缺点优点…