Qt 是一个跨平台的应用程序开发框架,用于创建高性能、可扩展和用户友好的图形用户界面(GUI)应用程序。它提供了丰富的工具、库和功能,使开发者能够轻松地构建各种类型的应用程序,包括桌面应用程序、移动应用程序和嵌入式系统应用程序。下面我们将介绍如何使用Qt进行嵌入式GUI程序的开发。
进行Qt开发前首先要准备好开发环境,准备环境的步骤如下
首先,您需要选择一个虚拟机软件,如 VirtualBox、VMware 等。这些软件可用于在物理计算机上模拟运行一个虚拟的 Linux 环境。
下载适合嵌入式开发的 Linux 发行版,如 Ubuntu、Fedora、Debian 等。这些发行版通常提供了适用于嵌入式开发的工具和库。本教程使用了 Ubuntu 22.04 进行开发。镜像下载地址如下:http://security.ubuntu.com/ubuntu/pool/main/o/openssl
在虚拟机软件中创建一个新的虚拟机并为其分配适当的资源,包括内存和存储空间,建议内存大小大于4096MB,然后,选择下载的 Linux 发行版的 ISO 镜像文件,并在虚拟机中安装该 Linux 系统。
需下载编译器(如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
基于嵌入式系统开发qt需要设置开发环境变量、路径和工具链等,以确保开发工具能够正确地与嵌入式系统进行交互。这样您就可以在虚拟机中进行开发,并使用交叉编译工具链将应用程序编译为目标嵌入式平台的可执行文件。
在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 creator中选择New project
创建helloqt项目
按默认选项创建类名,头文件,源文件
工程目录包括如下内容:
HelloQt.pro 为Qt特有的项目文件,用来管理Qt项目
main.cpp main函数所在的文件
mainwindow.cpp 自定义类MainWindow的头文件,这个类继承自QMainWindow
mainwindow.h 自定义类MainWindow的源文件
mainwindow.ui 界面文件,使用XML可拓展编辑语言编写
在工程目录右击“add new"选项添加C++ Class:
修改类名修改类名为MyWidget,Base class选择QWidget并勾选QObject和QWidget。
在mywidget.h中输入如下代码
#ifndef MYWidget_H
#define MYWidget_H
#include
#include
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
signals:
public slots:
};
#endif // MYWidget_H
在mywidget.cpp中输入如下代码
#include "mywidget.h"
#include
#include
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
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程序。