上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

本文主要是介绍上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们学习了如何在树莓派4b上面开发qt,也学习了如何用/etc/rc.local启动控制台程序,那今天我们继续学习一下如何利用树莓派4b开启第一个界面程序。这里的界面程序就是用qt开发的程序,假设这个程序是一个计算器,我们看下应该如何启动。

1、准备计算器程序的代码

        这部分代码出自另外一个课程,大家可以直接copy代码即可,文件名是mycalc.cpp,

// header file start here
#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QLineEdit>// function declaration
static double calculate(QString str);// main function start here
int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;window.setWindowTitle("Calculator");window.setFixedWidth(600);window.setFixedHeight(400);// create the layoutQGridLayout *layout = new QGridLayout(&window);// create the displayQLineEdit *display = new QLineEdit();display->setAlignment(Qt::AlignRight);display->setReadOnly(true);display->setFixedHeight(50);// add the display to the layoutlayout->addWidget(display, 0, 0, 1, 4);// create the buttonsconst QStringList buttonsText = {"7", "8", "9", "-","4", "5", "6", "*","1", "2", "3", "/","0", ".", "+", "="};// add the buttons to the layoutfor (int i = 0; i < 16; ++i) {QPushButton *button = new QPushButton(buttonsText[i]);button->setFixedHeight(40);layout->addWidget(button, 1 + i / 4, i % 4);// set up signal-slot connections, and setup anonymous functionif (buttonsText[i] == "=") {QObject::connect(button, &QPushButton::clicked, [&] {// evaluate the expression and set the result to the displayQString expression = display->text();display->setText(QString::number(calculate(expression)));});}else {QObject::connect(button, &QPushButton::clicked, [=] {// append the clicked button's text to the displaydisplay->setText(display->text() + button->text());});}}// show your window herewindow.show();return app.exec();
}// transfer the string to the calculated result 
//https://blog.csdn.net/be_quiet_endeavor/article/details/78847565
//
static double calculate(QString str)
{if (str.indexOf("+") != -1){int i = str.indexOf("+");return calculate(str.left(i)) + calculate(str.right(str.length() - 1 - i));}if (str.indexOf("-") != -1){QStringList list = str.split('-');double value = calculate(list[0]);if (str.at(0) == "-")value = -value;for (int i = 1; i < list.count(); ++i){value -= calculate(list[i]);}return value;}if (str.indexOf("*") != -1){int i = str.indexOf("*");return calculate(str.left(i))*calculate(str.right(str.length() - 1 - i));}if (str.indexOf("/") != -1){QStringList list = str.split('/');double value = calculate(list[0]);for (int i = 1; i < list.count(); ++i){value /= calculate(list[i]);}return value;}return str.toDouble();
}

2、直接用g++命令进行编译

        这里没有用cmake进行编译,而是直接用g++进行编译,

g++ -std=c++11 -o mycalc mycalc.cpp -I/usr/include/aarch64-linux-gnu/qt5 -I/usr/include/aarch64-linux-gnu/qt5/QtWidgets -lQt5Core -lQt5Widgets -lQt5Gui -lQt5DBus -lQt5XcbQpa -lpthread

3、开始准备desktop文件

        因为准备的内容比较多,所以我们可以直接准备一个脚本,

cd /home/feixiaoxing/.config
mkdir autostart
cd autostart
vi autostart.desktop

        这里desktop填写的内容也比较简单,

[Desktop Entry]
Type=Application
Name=myapp
Exec=/home/feixiaoxing/Desktop/qt/mycalc

        最重要的部分就是这里的Exec文件,指向刚才编译的可执行程序。

4、重启树莓派4b,开始测试

        所有这一切都准备好了之后,就可以重启树莓派4b了。因为我们这里没有屏幕,所以连接的方式就是通过real vnc viewer进行查看。过一段时间之后,如果不出意外,就可以看到这样的画面,这代表qt界面程序已经启动好了。

这篇关于上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947964

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打