广告公司手机网站模板,房地产集团网站建设方案,网站建设需要找工信部吗,wordpress的新建页面功能1、目标
利用QT实现调节屏幕亮度功能#xff1a;在无屏幕无触控时#xff0c;将屏幕亮度调低#xff0c;若有触控则调到最亮。
2、调节亮度命令
目标装置使用嵌入式Linux系统#xff0c;调节屏幕亮度的指令为#xff1a;
echo x /sys/class/backlight/backlight/…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 QDebugglobalapp::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 QDebugclass MouseHook : public QObject {bool eventFilter(QObject *obj, QEvent *event) override {if (event-type() QEvent::MouseMove) {QMouseEvent *mouseEvent static_castQMouseEvent*(event);//放置事件处理}else if(event-type() QEvent::SockAct){QMouseEvent *mouseEvent static_castQMouseEvent*(event);//放置事件处理}return QObject::eventFilter(obj, event);}
};
int main(int argc, char *argv[])
{MouseHook mouseHook;a.installEventFilter(mouseHook);return a.exec();
}
从上面的注释中也看到了无窗口时鼠标点击或触控事件并不等于QT定义的鼠标事件而是一个QEvent::SockAct事件
至于为什么是这个还未找到原因但这是个大坑啊