基于Qt的嵌入式GUI开发指南(一)

news2024/9/22 19:36:16

Qt 是一个跨平台的应用程序开发框架,用于创建高性能、可扩展和用户友好的图形用户界面(GUI)应用程序。它提供了丰富的工具、库和功能,使开发者能够轻松地构建各种类型的应用程序,包括桌面应用程序、移动应用程序和嵌入式系统应用程序。下面我们将介绍如何使用Qt进行嵌入式GUI程序的开发。

一、开发环境准备

进行Qt开发前首先要准备好开发环境,准备环境的步骤如下

1. 下载虚拟机软件和镜像

首先,您需要选择一个虚拟机软件,如 VirtualBox、VMware 等。这些软件可用于在物理计算机上模拟运行一个虚拟的 Linux 环境。
下载适合嵌入式开发的 Linux 发行版,如 Ubuntu、Fedora、Debian 等。这些发行版通常提供了适用于嵌入式开发的工具和库。本教程使用了 Ubuntu 22.04 进行开发。镜像下载地址如下:http://security.ubuntu.com/ubuntu/pool/main/o/openssl
在虚拟机软件中创建一个新的虚拟机并为其分配适当的资源,包括内存和存储空间,建议内存大小大于4096MB,然后,选择下载的 Linux 发行版的 ISO 镜像文件,并在虚拟机中安装该 Linux 系统。

2. 安装所需的开发工具和库

需下载编译器(如GCC)、调试器、构建工具、交叉编译工具链等开发工具

sudo apt update && sudo apt upgrade
sudo apt install -y wget git gcc ssh cmake ninja-build libssl-dev build-essential flex bison device-tree-compiler pkg-config

下载华山派SDK资源:

git clone https://github.com/sophgo/sophpi-huashan.git
cd sophpi-huashan && git pull

下载gcc编译工具链:

cd sophpi-huashan && bash download_host-tools.sh
tar -zxvf host-tools.tar.gz

gcc 编译工具链下载完成后进入目录,声明环境后即可编译 SDK:

cd cvi_mmf_sdk && source build/cvisetup.sh
defconfig cv1812h_wevb_0007a_emmc_huashan
build_all

开发GUI项目前,需安装OpenGL库

sudo apt-get install build-essential
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
sudo apt-get install libglfw3-dev libglfw3

3. 配置开发环境

基于嵌入式系统开发qt需要设置开发环境变量、路径和工具链等,以确保开发工具能够正确地与嵌入式系统进行交互。这样您就可以在虚拟机中进行开发,并使用交叉编译工具链将应用程序编译为目标嵌入式平台的可执行文件。

二、Qt下载与配置

Ubuntu 安装 Qt Creator

在Ubuntu中通过wget命令下载qt并且赋予它可执行权限:

mkdir qt
cd qt
wget https://download.qt.io/new_archive/qt/5.11/5.11.3/qt-opensource-linux-x64-5.11.3.run
sudo chmod +x qt-opensource-linux-x64-5.11.3.run
./qt-opensource-linux-x64-5.11.3.run

之后根据操作指示安装即可,需在安装时注册qt账号并在邮箱验证以获取更多资源。
在这里插入图片描述
成功安装后界面如下,Qt creator提供了多种例程以供学习。
在这里插入图片描述

三、创建Qt项目Helloworld

1.新建工程

在qt creator中选择New project
在这里插入图片描述
创建helloqt项目
在这里插入图片描述
按默认选项创建类名,头文件,源文件
在这里插入图片描述
工程目录包括如下内容:
HelloQt.pro 为Qt特有的项目文件,用来管理Qt项目
main.cpp main函数所在的文件
mainwindow.cpp 自定义类MainWindow的头文件,这个类继承自QMainWindow
mainwindow.h 自定义类MainWindow的源文件
mainwindow.ui 界面文件,使用XML可拓展编辑语言编写

2.代码文档

在工程目录右击“add new"选项添加C++ Class:
在这里插入图片描述
修改类名修改类名为MyWidget,Base class选择QWidget并勾选QObject和QWidget。在这里插入图片描述
在mywidget.h中输入如下代码

#ifndef MYWidget_H
#define MYWidget_H

#include <QWidget>
#include <QObject>

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = nullptr);

signals:

public slots:
};

#endif // MYWidget_H

在mywidget.cpp中输入如下代码

#include "mywidget.h"

#include <QLabel>
#include <QBoxLayout>

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    QLabel *label =new QLabel("hello widget");
    label->setAlignment(Qt::AlignCenter);

    QVBoxLayout *verLayout = new QVBoxLayout(this);
    verLayout->setContentsMargins(0, 0, 0, 0);
    verLayout->setSpacing(0);

    verLayout->addWidget(label);
}

在main.cpp中修改,删除(注释) MainWindow w ,声明MyWidget w 。

#include "mainwindow.h"
#include "mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //MainWindow w;

    MyWidget w;

    w.resize(800, 480);
    w.show();

    return a.exec();
}

这样我们就建立一个helloworld的qt程序。

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

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

相关文章

Bellhop 从入门到上手

文章目录 前言一、Bellhop 简介二、Bellhop 结构1、输入文件2、输出文件 三、Bellhop 环境文件1、OPTIONS12、OPTIONS23、OPTIONS34、OPTIONS45、其他参数 四、BELLHOP&#xff08;Matlab_GUI&#xff09;实例1、bellhop 工具箱自取2、解压缩工具箱3、设置路径4、添加并包含子文…

高频面试八股文原理篇(六) mysql数据库的左连接,右连接,内链接有何区别

目录 内连接与外连接的区别 在sql中l外连接包括左连接&#xff08;left join &#xff09;和右连接&#xff08;right join&#xff09;&#xff0c;全外连接&#xff08;full join&#xff09;&#xff0c;内连接(inner join) 内连接与外连接的区别 自连接 一个表与它自身进…

Redis(一)常见命令使用

常见文件名Redis-cli使用命令1、启动Redis2、连接Redis3、停止Redis4、发送命令1、redis-cli带参数运行&#xff0c;如&#xff1a;2、redis-cli不带参数运行&#xff0c;如&#xff1a; 5、测试连通性 key操作命令获取所有键查询键是否存在删除键查询键类型移动键查询key的生命…

第二十章行为性模式—迭代器模式

文章目录 迭代器模式解决的问题结构实例存在的问题适用场景 JDK 源码 - Iterator 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。行为型模式分为…

“30分钟”带你走进线性回归的世界,轻松学习互联网营销推荐算法!

前言 本章主要介绍用于推荐系统的算法-线性回归算法的推导介绍&#xff0c;文章思路如下&#xff1a;由机器学习介绍&#xff0c;到监督学习&#xff0c;并重点介绍监督学习中回归问题里面的线性回归问题及推导。 可能需要大家具备一定的统计学、高数相关知识。 一、由机器学…

k8s入门(一)之pod创建、label使用、污点、亲和性、RS

一、创建一个pod [rootmaster01 ~]# kubectl create ns prod [rootmaster01 ~]# cat pod.yaml apiVersion: v1 kind: Pod metadata:name: pod-demonamespace: prodlabels:app: myapp spec:containers:- name: test1image: busybox:latestcommand:- "/bin/sh"- "…

问题记录 bug1-系统上电挂载异常分区,df与du命令查看文件使用大小显示不一样

linux磁盘分区 在Linux中&#xff0c;一切皆目录&#xff0c;每一块硬盘分区对应Linux的一个目录&#xff0c;所以我们可以通过管理目录来管理硬盘分区&#xff0c;而将硬盘分区与文件目录关联的操作就称为“挂载”【mount】&#xff0c;反之为“卸载”【unmount】 emmc&…

C高级 text

1.从命令行传参传入两个整数&#xff0c;整数1代表从整数几开始求和&#xff0c;整数2代表求和到整数几为止 2.打印99乘法表 3.输入年月日&#xff0c;计算是该年的第几天 1. 2. 3.

Linux进程基础

进程指正在运行的程序&#xff0c;如下图示&#xff0c;是资源分配的最小单位&#xff0c;可以通过“ps ”或“top”等命令查看正 在运行的进程&#xff0c;线程是系统的最小调度单位&#xff0c;一个进程可以拥有多个线程&#xff0c;同一进程里的线程可以共享此 进程的同一资…

Server版支持即将到期,Jira和Confluence如何迁移?(2)

到2024年2月&#xff0c;Atlassian将终止对Server产品及插件的所有支持。是时候制定您的迁移计划了——Atlassian为您提供两种迁移选择&#xff0c;一是本地部署的数据中心版本&#xff0c;中国用户25人以上即可使用&#xff0c;二是云版。作为Atlassian全球白金合作伙伴&#…

Markdown可以在线编辑吗?这个办法很好用

Markdown是一种轻量级标记语言&#xff0c;它使用简单的语法来创建文本&#xff0c;非常易于学习。它最初被设计为一种用于写作的格式&#xff0c;但现在已经成为了一种非常受欢迎的文本编辑工具。 作为一个较为方便的在线文本编辑器&#xff0c;它可以用代码代替文字&#xf…

一篇完整的测试方案怎么写

看上面的目录&#xff0c;详细 文档说明 文档名称 创建人/修改人 版本 时间 备注 v1.0 2022-11-17 新建 v1.1 2022-11-25 v1.2 2022-12-05 v2.0 2022-12-13 v2.1 2022-12-14 一、文档目的 为软件开发项目管理者、软件工程师、系统维护工程师、测试…

如何开发合成物品功能?

UE5 插件开发指南 前言0 数据结构1 合成面板UI组件2 小结前言 现在策划有一个合成物品的需求:可以将多个低级物品合成高级物品,如果背包中已有低级物品了,合成时需要减掉物品的费用,只需要支付合成费;提供玩家一个合成物品的层级视图,以便于玩家有节奏的购买物品,如下图…

电影《刀剑神域进击篇:暮色黄昏》观后感

上周看了电影《刀剑神域进击篇&#xff1a;暮色黄昏》&#xff0c;刀剑神域系列质量还是非常不错的&#xff0c; 本部电影讲述主角团队攻克boss&#xff0c;阻止公会团体互相打架的故事。 刀剑系列&#xff0c;记得当初是以一部连载动漫为开端&#xff0c;如果不是特别喜欢看动…

计算机网络—HTTP基本概念、HTTPS、HTTP状态码、HTTP缓存、HTTP请求

参考小林coding HTTP基本概念 HTTP是超文本传输协议。所谓的超文本&#xff0c;就是超越了普通文本的文本&#xff0c;最关键的是有超链接&#xff0c;能从一个超文本跳转到另一个超文本。 HTML是最常见的超文本&#xff0c;本身是纯文字文件&#xff0c;但是内部使用很多标签…

Scrum敏捷项目管理实例

这是一个Scrum敏捷单团队敏捷开发示例。 1、建立产品路线图 首先我们需要为这个项目创建一个产品路线图&#xff0c;产品路线图是一个高层次的战略计划&#xff0c;它描述了产品在未来一段时间可能会如何发展和壮大&#xff0c;产品路线图确保整个产品团队持续关注产品的目标…

GEE:对Landsat遥感影像进行处理,水体提取与可视化

作者:CSDN @ _养乐多_ 本文介绍了通过Google Earth Engine平台,并使用Landsat卫星遥感数据提取水体掩膜的方法和代码。通过裁剪和去除云等处理步骤,最终得到具有水体掩膜的影像,并进行可视化和导出。这种方法基于归一化水体指数(MNDWI)和OTSU阈值计算技术,使用了一个自…

MyBatis(MyBatis环境搭建,单表操作)

目录 MyBatis 环境搭建 1.添加 Mybatis 框架支持 2.设置 MyBatis 配置信息 2.1.设置数据库连接的相关信息 2.2 Mybatis xml 保存路径和 xml命名格式 ​编辑 MyBatis 模式开发 Mybatis xml 模板 查询表内容 单元测试 以根据id,查询用户对象这个方法为例 获取动态参数的…

警惕,最近的副业兼职诈骗。

大家好&#xff0c;我是鸟哥。 今天和大家聊聊最近超级猖狂的几类诈骗。 一、副业诈骗。最近两年“副业刚需”这个口号很流行&#xff0c;尤其是今年&#xff0c;职场动荡、工作难找&#xff0c;副业刚需变成了副业焦虑&#xff0c;骗子们也正是抓住了大家的这个心理&#xf…

【Vue全家桶实现电商系统】— VSCode配置Git(二)

【Vue全家桶实现电商系统】— VSCode配置Git&#xff08;二&#xff09; 当我们在VScode中编写代码后&#xff0c;需要提交到git仓库时&#xff0c;但是我们又不想切换到git的命令行窗口&#xff0c;我们可以在 VScode中配置git&#xff0c;然后就可以很方便快捷的把代码提交…