Qt程序怎样让linux进入待机状态?

wenwu1225 2014-06-13 12:29:05
[size=24px]我想在Qt界面的一个按钮按下后,使arm板上的linux进入待机状态,如果有某些外部中断发生,马上就能启动并显示界面,尝试了一下两种方式,都有问题:
第一种方式:
在按钮的槽函数中执行函数 system("echo standby > /sys/power/state");
之后Qt程序似乎一直在等待system函数返回,使用ps命令可以看到两个进程:
1,sh -c echo standby > /sys/power/state
2,echo standby
然后kill上面第2个进程后,进入待机状态,显示屏不再显示.
点击触摸屏后,系统唤醒,显示正常.
这种方式的问题就是上面说的需要kill第2个进程后才能进入待机状态.

第二种方式:
在按钮的槽函数中,改为以下代码:
QFile file("/sys/power/state");
if (file.open(QIODevice::ReadWrite))
{
char *cmd = "standby";
file.write(cmd);
file.close();
}
else
{
qDebug() << "standby failed";
return;
}
这种方式能够立即进入待机状态,
但是,点击触摸屏唤醒系统后,闪现了一下Qt界面,然后界面就黑了,左上角光标跳动.
而Qt程序事实上仍在运行(因为还在处理其它的事情);

然后不重启板子,kill掉Qt程序,第二次启动Qt程序后,不停地待机,唤醒都是没有问题的.

请教大家,Qt程序怎样让linux进入待机状态,而免掉上面的问题呢?
非常感谢!!!
...全文
548 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenwu1225 2014-06-16
  • 打赏
  • 举报
回复
解决方案确实如2楼提示, 谢谢. 具体解决方法分享如下,希望对大家都有借鉴. 第一次尝试: QProcess::startDetach("echo standby > /sys/power/state"); 这种方式只在终端显示了 standby > /sys/power/state 这个可能是输出重定向方面的问题; 然后换了种方式: 另外写了个程序power_test.c #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(void) { int fd; char *cmd = "standby"; fd = open("/sys/power/state", O_WRONLY, 0666); if(fd < 0) { printf("power off failed\n"); return -1; } write(fd, cmd, strlen(cmd)); close(fd); return 0; } 编译后拷到/bin文件夹下, 之后在Qt中使用 QProcess::startDetach("power_test"); 结果如愿; 致谢2楼
wenwu1225 2014-06-15
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
使用 QProcess ,不要用 system 。下列函数可以启动一个与 Qt 应用分离的进程: bool startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0) bool startDetached(const QString & program, const QStringList & arguments) bool startDetached(const QString & program) 试一下。 另外待机唤醒后,你可能需要刷新一次界面。你用的什么 Qt 版本?
用的Qt4.8.2的,马上试试
foruok 2014-06-13
  • 打赏
  • 举报
回复
使用 QProcess ,不要用 system 。下列函数可以启动一个与 Qt 应用分离的进程: bool startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0) bool startDetached(const QString & program, const QStringList & arguments) bool startDetached(const QString & program) 试一下。 另外待机唤醒后,你可能需要刷新一次界面。你用的什么 Qt 版本?
螺旋e风琴 2021-07-22
  • 举报
回复
@foruok 楼主,您好,我qt运行在后台,linux运行echo "mem" &gt; /sys/power/state休眠然后唤醒后qt界面显示不全,是否需要重新刷新一次界面呢?如何刷新呢?谢谢~

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧