【QT代码控制Linux开发板】QT控制嵌入式Linux开发板运行shell脚本

news2024/11/25 18:39:27

一. 前言

最近遇到了一个很冲突的问题,我想让比如qt代码控制传感器读取的数值大于某个阈值时控制板子的灯亮进行报警。

但是当我在Linux开发板上./运行交叉编译后的qt文件时,想运行开发板的其他shell语句必须先退出qt代码的执行,当然开发板是支持多线程的一种方法就是

./your_qt_application & ./your_script.sh &

但是以上这个情况只能同时运行这两个文件,不能等待某个”时机“运行shell语言,这就很不方便。有没有一种方法可以实现我把想执行的shell脚本语言(或功能)融合进qt代码,当qt代码运行到相应位置时也会同时执行shell脚本?

答案是当然有,而且相当方便嘞!QProcess闪亮登场!

可不敢小瞧它,它可是进程之间通信的利器!具体的用法我就不赘述啦,参考下面两篇文章,讲得很清楚(比笔者专业多了)。

https://blog.csdn.net/lizhong2008/article/details/136840521

https://blog.csdn.net/MrHHHHHH/article/details/135490531

二. 上代码

我就直接上例子了,主要解决的问题就是我开头提到的当传感器超过某个阈值时,进行报警的功能。

(1)首先就是在mainwindow.cpp代码中包含QProcess类

#include <QProcess>

(2)第二步就是创建对象同时在mainwindow.h进行QProcess初始化

QProcess *process; // QProcess对象指针

(3)第三步是直接调用函数,注意我这里是直接调用静态函数execute,所以可以直接调用而无需创建QProcess对象,

else if (risk_level >= 0.6 && risk_level < 0.8) {
            riskText = "中度风险";
            color = "orange";
            QProcess::execute("/bin/sh", QStringList() << "/home/set_led.sh");
            //ledScriptExecuted = true;  // 标记脚本已执行
        }

QProcess::execute会在调用时阻塞当前的线程,直到进程完成。也就是说,程序会等待Shell脚本执行完毕后再继续执行后面的代码。

/bin/sh是Unix系统上一个通用的Shell(通常是Bourne Shell或与之兼容的Shell),可以用来执行Shell脚本或直接输入的命令。

同理如果要运行Python脚本

QProcess::execute("python3", QStringList() << "/home/demo.py");

三. 注意事项

(1)因为是采用的静态的execute函数,如果你的脚本代码比较复杂运行时间较长可能会使qt代码界面无响应哦(可以考虑使用QProcess的异步方式来执行脚本),所以比较适用于脚本语言简单,对qt代码实时性要求不高的情况下。下面给出异步方式的示例代码,具体情况需要具体分析。

// 在头文件中包含 QProcess 头文件
#include <QProcess>

// 在需要执行脚本的地方创建 QProcess 对象
QProcess *process = new QProcess(this);

// 连接信号槽来处理进程结束后的操作(可选)
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
        this, [](int exitCode, QProcess::ExitStatus exitStatus){
            qDebug() << "Process finished with exit code:" << exitCode;
        });

// 启动 Python3 脚本,使用异步方式
process->start("python3", QStringList() << "/home/demo.py");

// 检查进程是否启动成功
if (!process->waitForStarted()) {
    qDebug() << "Failed to start process";
}

以上程序可以实现qt程序继续执行,不必等待脚本进程的执行结果。

(2)使用QProcess前提下是保证想要运行的脚本有可执行权限(特别是/目录下的文件,往往需要手动赋予可执行权限)

首先查看文件权限

ls -l /home/set_led.sh

如果没有可执行权限修改权限

chmod +x /home/set_led.sh

以上就是这个问题的全部内容啦,不得不说QT的水是真的深,年少不知QT好,还有很多其他的功能有待学习与应用。

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

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

相关文章

ios白苹果修复办法有哪些?

在这个数字化时代&#xff0c;iPhone作为智能手机的佼佼者&#xff0c;早已融入了我们生活的方方面面。然而&#xff0c;当那熟悉的开机画面——“白苹果”意外地成为了你的日常&#xff0c;无疑让人头疼不已。别担心&#xff0c;今天我们就来聊聊iOS白苹果现象的成因及几种有效…

Element-ui table进阶使用

最近项目有多个报表开发的需求&#xff0c;我采用的是凤翎前端组件框架&#xff08;基于element-ui开发&#xff09;&#xff0c;大伙可以直接参考element-ui组件库文档&#xff0c;把标签中的fks替换为el即可。下面我会按顺序一一展开细说这些需求&#xff1a; 1、有多级表头…

Java语言程序设计基础篇_编程练习题***16.31(游戏:四子连)

目录 题目&#xff1a;***16.31&#xff08;游戏&#xff1a;四子连&#xff09; 习题思路 代码示例 结果展示 题目&#xff1a;***16.31&#xff08;游戏&#xff1a;四子连&#xff09; 编程练习题8.20让两个玩家在控制台上可以玩四子连的游戏。为这个程序重写一个GUI版本…

Open3D mesh 模型锐化

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数 输出参数 2.2完整代码 三、实现效果 3.1原始mesh 3.2处理后mesh 3.3数据显示 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总…

反射异常捕获 | InvocationTargetException 要用e.getCause()打印才能看到具体异常

背景&#xff1a;线上某段和反射相关的代码报错了&#xff0c;但是异常信息打印只看到了 InvocationTargetException&#xff0c;没打印具体的异常。就像这样&#xff1a;java.lang.reflect.InvocationTargetException: null 查阅资料后发现要用e.getCause()才能打印具体异常&a…

[数据集][目标检测]航拍屋顶检测数据集VOC+YOLO格式458张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;458 标注数量(xml文件个数)&#xff1a;458 标注数量(txt文件个数)&#xff1a;458 标注类别…

深度剖析数字媒体产业链的无限潜力与创新生态

在当今信息爆炸的时代&#xff0c;数字媒体产业链正以势不可挡的姿态展现出其令人瞩目的无限潜力与创新生态。 数字媒体的发展潜力简直无可限量。从在线视频的爆发式增长&#xff0c;到虚拟现实和增强现实技术带来的沉浸式体验&#xff0c;再到社交媒体平台上丰富多彩的内容创…

抽象类与抽象函数+接口

抽象类与抽象函数 什么是抽象方法 抽象方法是没有实现代码的虚方法 抽象方法使用abstract修饰符进行声明&#xff0c;只能在同样声明了abstract的类中使用。 继承了抽象类的子类必须实现抽象类的所有抽象方法。 什么是抽象类 用abstract修饰过的类是抽象类 抽象类无法被…

《机器学习》 决策树 ID3算法

一、什么是决策树&#xff1f; 1、概念 决策树是机器学习中一种常见的分类和回归算法。它基于树状结构的模型&#xff0c;通过对数据进行逐步划分&#xff0c;最终生成一棵决策树来进行预测或分类任务。 在决策树中&#xff0c;每个节点代表一个特征或属性&#xff0c;每个分支…

数据库:数据更新和视图

1 实验目的 &#xff08;1&#xff09;掌握SQL语言的数据更新功能&#xff1a; update 语句用于对表进行更新 delete 语句用于对表进行删除 insert 语句用于对表进行插入 &#xff08;2&#xff09;掌握对视图的操作&#xff1a; 视图的定义 视图的更新 基于视图的查询 …

總結熱力學_4(完了)

參考: 陈曦<<热力学讲义>>http://ithatron.phys.tsinghua.edu.cn/downloads/thermodynamics.pdf 7 最大功定理 考虑一个与外界隔绝的由几个彼此不处于热平衡、但相互绝热的物体组成的系统。另外还需要一个重物,它不参与热力学过程,但是可以以重力势能的 方式存…

js vscode 关于对象数组的一个bug

数据结构&#xff1a; let address [{label: "北京市",children: []},{label: "天津市",children: []},{label: "上海市",children: []},{label: "重庆市",children: []},{label: "河北省",children: [{label: "石家…

Flink 同步 MySQL 到 Doris

一、前言 使用Apache Flink实现数据同步的ETL&#xff08;抽取、转换、加载&#xff09;过程通常涉及从源系统&#xff08;如数据库、消息队列或文件&#xff09;中抽取数据&#xff0c;进行必要的转换&#xff0c;然后将数据加载到目标系统&#xff08;如另一个数据库…

Spring自动注册-Bean的加载

Spring在进行完xml文件标签解析后,我们如何获取对应的Bean? 核心方法: getBean() Spring三级缓存&循环依赖: 由于单例在Spring容器中只会被创建一次&#xff0c;即&#xff1a;创建出来的单例实例对象就会被缓存到singletonObjects(一级缓存)中。所以&#xff0c;当要获得…

Nginx高级部分

一、web服务基础介绍 Web 服务基础介绍 正常情况下的单次web服务访问流程&#xff1a; Apache 经典的 Web 服务端 Apache起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发 目前经历了两大版本分别是1.X和2.X 其可以通过编译安装实现特定的功能 1.Apache pr…

<数据集>航拍牧场牛羊识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1021张 标注数量(xml文件个数)&#xff1a;1021 标注数量(txt文件个数)&#xff1a;1021 标注类别数&#xff1a;3 标注类别名称&#xff1a;[cattle, cow, sheep] 序号类别名称图片数框数1cattle29741282cow6740…

网络安全漏洞防护技术原理与应用

网络安全漏洞概述 概念 定义&#xff1a;又称脆弱性&#xff0c;简称漏洞。一般是致使网络信息系统安全策略相冲突的缺陷&#xff08;安全隐患&#xff09; 影响&#xff1a;机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控制性下降、真实性不保等 范围&#xff…

Kerberos认证以及黄金票据白银票据的简单介绍

目录 1. 什么是Kerberos认证2. Kerberos认证流程3. 票据伪造4. 金票和银票的原理5. 金票和银票的区别6. 针对Kerberos的攻击 1. 什么是Kerberos认证 Kerberos是一种网络身份认证的协议&#xff0c;协议设计目的是通过使用秘钥加密技术为客户端/服务器应用程序提供强身份验证&am…

【vue3|第24期】深入了解useRouter:方法、属性与使用示例

日期&#xff1a;2024年8月20日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

安装CUDA、CUDNN、pytorch

2.1 安装CUDA 2.1.1找到CUDA的版本号 2.1.1.1 屏幕的左下角&#xff0c;找到NVIDIA控制面板的图标&#xff0c;如下图所示&#xff1a; 图2.1.1.1 NVIDIA控制面板图标 2.1.1.2 打开NVIDIA控制面板&#xff0c;找到系统信息&#xff0c;如下图所示&#xff1a; 图2.1.1.2 系…