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

news2024/10/7 19:27:12

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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 layout
	QGridLayout *layout = new QGridLayout(&window);
 
	// create the display
	QLineEdit *display = new QLineEdit();
	display->setAlignment(Qt::AlignRight);
	display->setReadOnly(true);
	display->setFixedHeight(50);
 
	// add the display to the layout
	layout->addWidget(display, 0, 0, 1, 4);
 
	// create the buttons
	const QStringList buttonsText = {
		"7", "8", "9", "-",
		"4", "5", "6", "*",
		"1", "2", "3", "/",
		"0", ".", "+", "="
	};
 
	// add the buttons to the layout
	for (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 function
		if (buttonsText[i] == "=") {
			QObject::connect(button, &QPushButton::clicked, [&] {
 
				// evaluate the expression and set the result to the display
				QString expression = display->text();
				display->setText(QString::number(calculate(expression)));
			});
		}
		else {
			QObject::connect(button, &QPushButton::clicked, [=] {
 
				// append the clicked button's text to the display
				display->setText(display->text() + button->text());
			});
		}
	}
	// show your window here
	window.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界面程序已经启动好了。

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

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

相关文章

渗透测试流程(一)

文章目录 1、信息收集渗透测试的流程信息收集的内容信息收集的分类Google hacking 信息收集目录扫描信息收集旁站和C段信息收集旁站和C段在线查询地址&#xff1a; 存活资产探测nmap扫描nmap扫描扫描指定的IP开放端口&#xff1a;穿透防火墙扫描&#xff1a;常用命令--2漏洞扫描…

如何用OceanBase的 Load Data 导入CSV文件

0 前言 CSV文件&#xff08;Comma-Separated Values&#xff0c;字符分隔值&#xff09;是一种普遍采用的数据存储格式&#xff0c;有不少企业和机构都用它来进行数据的管理和存储。身为开发者&#xff0c;您可能经常遇到这样的需求&#xff1a;需要将CSV的数据导入OceanBase数…

python基础知识(17)面向对象 1

一、面向对象的概念 1、面向对象的两个基本概念 编程语言中&#xff0c;一般有两种编程思维&#xff0c;面向过程和面向对象。 面向过程&#xff0c;看重的是解决问题的过程。 这好比我们解决日常生活问题差不多&#xff0c;分析解决问题的步骤&#xff0c;然后一步一步的解决…

知乎热议:未来几年,AI技术在科研领域将有哪些新的发展趋势或突破?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 一年多以来&#xff0c;各种国内外的AI模型和应用应接不暇&#xff0c;从刚开始ChatGPT一家独大&#xff0c;到现在的百花齐放&#xff0c;各种AI模型各有千秋&#xff0c;一时…

CVE-2023-48795修复方法

CVE-2023-48795修复方法 1、修复原理2、检测漏洞3、修复漏洞4、成功修复 近期nessus扫描经常出现一个中危漏洞CVE-2023-48795&#xff0c;但网上的修复方法清一色的将openSSH升级到9.6p1版本 而我在升级当中处处碰壁&#xff0c;甚至于差点给服务器都干崩溃&#xff0c;特意研究…

Coursera: An Introduction to American Law 学习笔记 Week 01: Tort Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors SyllabusWeek 01: Tort LawKey Tort Law TermsTort Law: Part …

AI写作软件:一键生成原创文案,效率就是高

对于文案创作人员来说&#xff0c;常期的创作都会出现灵感枯竭现象&#xff0c;从而导致文案创作人员写不出文案的问题&#xff0c;那么如何解决文案写不出来的问题呢&#xff1f;别急&#xff0c;本文会给大家分享出好的解决方法&#xff01;大家要知道&#xff0c;随着人工智…

uniapp微信小程序开发踩坑日记:Vue3 + uniapp项目引入Echarts图表库

一、下载插件包 下载地址如下&#xff1a; lime-echart: 百度图表 echarts&#xff0c;uniapp、taro 使用 echarts 图表&#xff0c;全面兼容各平台小程序、H5、APP、Nvue 将以下两个文件夹放到项目的components里 同样地&#xff0c;将静态资源文件夹下内容放到自己项目的s…

c++高级篇(三) ——Linux下IO多路复用之poll模型

poll模型 前言 poll模型与select的实现原理相近&#xff0c;所以绝大数的原理其实可以参考select&#xff0c;我们这里对二者的相同点不做过多探究&#xff0c;如果有需要可以去看一下博主的上一篇文章&#xff1a; c高级篇(二) ——Linux下IO多路复用之select模型 这里我们只…

全志ARM-蜂鸣器

sh操作准备&#xff1a; 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置&#xff0c;修改/etc/vim/vimrc文件&#xff0c;需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

OpenTiny开源之夏编程达人集结令:4月30日正式上线,寻找最强代码战士!

五一来袭&#xff0c;OpenTiny 开源之夏编程项目正式上线&#xff01; 已梦为马&#xff0c;不负韶华 聚焦前端&#xff0c;OpenTiny 喊你来参加编程活动了 10个赛题任你选&#xff01; 我们诚挚邀请你参与本次 OpenTiny 开源之夏编程活动&#xff0c; 用你的智慧和才能&a…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-5]【The Riemann Mapping Theorem】

前言&#xff1a; mobius变换保角性证明一直困扰我很久.当看完黎曼映射定理以及结合MIT的数学证明 深刻的感触到数学之美&#xff0c;“知之深&#xff0c;情之切”。 黎曼映射&#xff08;The Riemann Mapping&#xff09;定理是复分析最深刻的定理之一&#xff0c;也是复变函…

帮助文档更新了

原先的帮助文档比较简单&#xff0c;大家可能对大部分功能都比较陌生&#xff0c; 最近对帮助文档进行了一轮改版&#xff0c;整个帮助文档更加详细了&#xff0c;对新用户更加友好&#xff0c;这里给大家介绍一下最新的帮助中心 大家进入官网&#xff08;zyjj.cc&#xff09;的…

【再探】设计模式— 工厂方法、单例及原型模式

创建型设计模式是处理对象创建的设计模式&#xff0c;主要特点是“将对象的创建与业务代码分离”。一共有五种&#xff1a;工厂方法模式、单例模式、原型模式、抽象工厂模式及建造者模式。 1 单例模式 需求&#xff1a; 在整个系统中只需要一个实例。管理共享资源&#xff0…

看见游戏出海赛道的新机会

目前游戏出海的主要地区和国家都已经非常成熟&#xff0c;原有的发行方式方法也基本标配化&#xff0c;除了产品玩法的差异化&#xff0c;多元化渠道及获量新方式是提升竞争力的有效手段 4月24日&#xff0c;在深圳南山区&#xff0c;VERYCLOUD睿鸿股份与罗斯基、热力引擎共同主…

基于Spring Boot的外卖点餐系统设计与实现

基于Spring Boot的外卖点餐系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 网站首页界面图&#xff0c;通过进入网站可以查看首页、…

新时代教师口才演讲稿(3篇)

新时代教师口才演讲稿&#xff08;3篇&#xff09; 新时代教师口才演讲稿&#xff08;一&#xff09; 尊敬的各位领导、亲爱的同事们&#xff1a; 大家好&#xff01; 今天&#xff0c;我站在这里&#xff0c;深感荣幸与激动。在这个新时代里&#xff0c;教师的口才不仅仅是传…

后端java部署教程,docker配置解读(linux用docker部署新手入门)

文件夹结构 然后解读几个启动脚本 首先dockerFile # 使用anapsix/alpine-java:8_server-jre_unlimited作为基础镜像 FROM anapsix/alpine-java:8_server-jre_unlimited# 设置维护者信息 MAINTAINER adminxiaohuaikeji.com# 设置时区为Asia/Shanghai RUN ln -sf /usr/share/z…

组装nas的 神器 n100 ,改天组装一个!

N100的CPU性能虽然不是很强&#xff0c;性能接近4代i5移动端&#xff0c;但功耗很低&#xff0c;TDP只有6W&#xff0c;而且有个24单元的核显&#xff0c;解码视频能力不差。N100和Intel的i系列CPU是不同厂商生产的&#xff0c;并且它们的设计和架构也有所不同&#xff0c;因此…

Vitis HLS 学习笔记--Schedule Viewer 调度查看器

目录 1. 简介 2. Schedule Viewer详解 2.1 视图说明 2.1.1 Operation\Control Step 2.1.2 周期关系图 2.1.3 Schedule Viewer 菜单栏 2.1.4 属性视图 2.2 内容说明 2.2.1 实参&#xff08;b&#xff09;解释 2.2.2 实参&#xff08;a&#xff09;解释 2.2.3 变量&am…