@

1.嵌入式Qt简介

Qt 是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只需要编写一套代码,然后把这套代码放在不同平台的Qt环境去编译,就会生成可以运行在对应平台的应用程序。例如,我在Windows写了一个串口助手,这套代码不用修改,放在Linux环境下的Qt开发环境,重新编译,就可以生成可以在Linux环境下运行的串口助手,当然,Qt支持的环境有很多。不同平台下的移植,只需要修改很小一部分或者不用修改就可以直接运行。



嵌入式Qt,即QtE,属于Qt Embedded Linux 分支平台。Qt/E 所面对的硬件平台较多,当开发人员需要在某硬件平台上移植 Qt/E 时,需要下载Qt 源代码,利用交叉编译器编译出 Qt 库。接着需要将 Qt 库复制两份,一份放置在开发主机上,供编译使用;一份放在目标板上,供运行时动态加载使用。

2.查看开发板Qt库的版本

要想在开发板上运行Qt程序,首先板子上要有Qt的库,而且要确定这个的库的版本。那么怎么看

开发板上的Qt库是Qt-4.7.3版本的。可以使用find搜索命令,搜索本地所有Qt相关的文件:

#进入到根目录
cd / #搜索qt相关的文件
find -name "*Qt*"
#或者
find -name "*qt*"

如果搜索结果有很多so类型的文件,说明这个开发板上的系统是支持Qt的,而且后面的数字就是当前Qt库的版本号。



可以看出,iMX287A开发板支持Qt,库的版本是4.7.3。

3.第一个嵌入式Qt程序——Hello World

又是"Hello World",无论学习什么东西,都要先来个"Hello World",当然Qt也不例外。

3.1 主机搭建嵌入式Qt环境

搭建一个最基本的Qt环境,需要两个东西:qmake和编译器。编译器用的是交叉编译器,我们在第一节的教程中,已经介绍了,并且已经把交叉编译器的路径添加到了环境变量。下面我们就来安装用来开发嵌入式程序的qmake。

qmake包工具在光盘的位置:3、Linux\2、工具软件\Linux 工具软件\qt4.7.3.tar.bz2

#进入到opt目录
cd /opt #解压qmake套件,Qt-4.7.3.tar.bz2
sudo tar -jxvf qt4.7.3.tar.bz2 #添加到用户环境变量
sudo vim ~/.bashrc #文件末尾添加一行,$PATH放在后面,表示路径添加在环境变量最前面
export PATH=/opt/qt4.7.3/bin/:$PATH #使设置的环境变量生效
source ~/.bashrc #查看当前的PATH路径
echo $PATH #查看当前Qt版本
qmake -v

如果本机有多个qmake,那么一定要把嵌入式qmake路径添加到环境变量最前面,否则不能识别



如果输出了Qt的版本,并且所在路径是我们设置的,说明Qt环境搭建成功。

3.2 编写Hello World源程序

我们来编写一个简单的界面,程序只显示一个标签,标签的内容是“Hello World”。在PC上交叉编译之后,把可执行文件传输到开发板上运行。

#新建一个文件夹存放qt工程
mkdir hello_qt #新建cpp文件
touch hello_qt.cpp #编辑hello_qt文件
vim hello_qt.cpp

hello_qt.cpp文件的内容:

//Qt图形库
#include <QtGui> int main(int argc, char *argv[])
{
QApplication app(argc,argv);
//新建一个标签
QLabel label(QString("hello qt"));
label.show(); app.exec();
}

程序很简单,就是新建了个标签,文本内容是"hello qt",然后让这个标签show出来。下面开始编译,生成可执行文件:

#生成.pro文件
qmake -project #生成Makefile文件
qmake #编译生成可执行文件
make

这样,就生成了hello_qt的可执行文件,可以使用file命令看一下文件类型:



支持ARM平台运行的Qt程序。

3.3 开发板运行Hello World

通过scp传输,NFS共享的方式把这个文件在开发板上运行:



在开发板上运行:



实际效果:

4.Linux桌面版本Qt环境的搭建

Qt 是一个跨平台的图形框架,在安装了桌面版本的 Qt SDK 的情况下,用户可以先在PC 主机上进行 Qt 应用程序的开发调试,待应用程序基本成型后,再将其移植到目标板上。

桌面版本的 Qt SDK 主要包括以下两个部分:

  • 用于桌面版本的Qt
  • Qt Creator

4.1 安装桌面版本的Qt4

由于iMX287A官方系统内的Qt库是Qt-4.7.3版本的库,所以我们也要在桌面Linux安装Qt4版本。官方的下载链接里,只提供了Linux版本的Qt5,而如果想安装Linux版本的Qt4,需要自己使用源码进行编译。这里提供一个简单的方法,那就是Ubuntu自带的命令行apt-get安装功能,使用命令安装Qt4版本。在使用前,请确保已经更换为中国的服务器,否则下载速度会很慢。

#更新软件列表
sudo apt-get update #安装Qt4相关的所有软件
sudo apt-get install qt4* #安装QtCreator
sudo apt-get install qtcreator

耐心等待一会就安装好了,如果安装过程中提示缺少某个库,那就先apt-get安装某个库就可以了。

4.2 配置Qt Creator的构建套件

打开工具->选项->构建和运行菜单,添加嵌入式Qt的构建套件,默认桌面环境下的Qt4构建套件已经安装好了。我们只需要设置一下嵌入式环境下的Qt4构建套件

qmake路径:/opt/qt4.7.3/bin/qmake

#交叉编译gcc路径
/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gccc #交叉编译g++路径
/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-g++ #交叉编译gdb路径
/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gdb

然后在构建套件(Kit)下新建一个构建套件

#名称
imx287 #设备类型
同样Linux设备 #C/C++编译GDB
上一步设置的对应工具名称



如果构建套件前面有红色或黄色的感叹号,说明构建套件没有设置成功。

4.3 使用QtCreator涉及Hello World程序

构建套件设置完成之后,嵌入式Qt程序的开发就和桌面Qt程序的开发一样了:

  • 新建工程时,勾选imx287构建套件:

  • 界面设计

  • 桌面运行效果

  • 切换嵌入式构建套件

    如果程序效果正常,就可以切换为嵌入式构建套件,编译出可以在嵌入式平台运行的程序了。



    点击下面的锤子按钮,就可以编译出可以在嵌入式平台下运行的程序了。

4.4 开发板运行Hello World

使用scp或者NFS共享目录的方式把文件传输到开发板:



在开发板运行使用Qt IDE生成的可执行文件:

实际运行效果:

5.注意

  • iMX287A支持鼠标和触摸操作

如果想使用鼠标来操作,要在系统上电之前,就把鼠标插上,如果在运行过程中连接鼠标是不能使用的。

  • 窗口大小自适应屏幕分辨率和隐藏标题栏
#include <QDesktopWidget>
...........
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//不显示标题栏
this->setWindowFlags(Qt::FramelessWindowHint);
// this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); //获取屏幕分辨率
const QRect availableSize = QApplication::desktop()->availableGeometry(this);
qint16 width = availableSize.width();
qint16 height = availableSize.height();
qDebug() << "width: " << width << "height:" << height; //重新设置窗口充满整个屏幕
this->resize(width, height);
//设置窗口大小为屏幕的1/3
// this->resize(width/3, height/3); //窗口位置移动到左上角
this->move(0, 0);
}

我的公众号:mcu149

iMX287A嵌入式Qt环境搭建的更多相关文章

  1. 转:Qt 嵌入式开发环境搭建

    地址: http://www.cnblogs.com/lishixian/articles/3013897.html         作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...

  2. 我用STM32MP1做了个疫情监控平台2—Qt环境搭建

    目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.主机搭建Qt环境 4.第一个Qt程序--Hello World 5.一些问题 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应用程序开发框架.使 ...

  3. QT5.6.0 VS2013 Win764位系统QT环境搭建过程

    QT5.6.0 VS2013 Win764位系统QT环境搭建过程 没用过QT自己跟同事要了安装包,按照同事指导方法操作安装部署开发环境结果遇到好多问题,错误网上搜遍了所有帖子也没有找到合适的解决方案. ...

  4. ubuntu-10.10嵌入式开发环境搭建【转】

    本文转载自:http://blog.csdn.net/zjhsucceed_329/article/details/8036781 版权声明:本文为博主原创文章,未经博主允许不得转载. ubuntu- ...

  5. Qt嵌入式开发环境搭建

    一.Qt版本介绍 按照不同的图形界面来划分,分为四个版本: 1.Win32版:适用于windows平台 2.X11版:适用于各种X系统的Linux和Unix平台 3.Mac版:适用于苹果的MacOS ...

  6. ubuntu14.04下嵌入式工作环境搭建

    昨天作死一不小心把小红帽home目录下的东西删光了.跟着国嵌的视频学了这么久,对linux也算是有些熟悉,就决定自己在ubuntu下搭建一个工作环境.整个过程还算比较顺利,不过也有些小波折.下面把这次 ...

  7. 嵌入式Linux环境搭建备忘

    嵌入式Linux开发平台搭建步骤: 1.安装宿主机Linux系统 如果选用最新的Linux发行版,应改主意其他软件是否能很好的兼容. 2.安装交叉编译器 交叉编译器的版本很多,一般到芯片厂家官网下载官 ...

  8. 基于CentOS-6.9_x64系统QT环境搭建

    想从事QT开发的人员,首先要做的第一件事就是开发环境的搭建.本人也是一位刚入门的新手,为了搭建这么一个环境,参考了很多的网上教程,然而中间依然走了不少弯路.现将过程记录下来. 一.开发环境    Ce ...

  9. Qt环境搭建(Qt Creator)+Visual Studio

    1.http://www.cnblogs.com/ranjiewen/p/5318768.html 简述 经常有人问我编写Qt程序时使用什么IDE,其实这个真的很难回答(各有所长),只能说看个人爱好了 ...

随机推荐

  1. VUEJS文件扩展名esm.js和common.js是什么意思

    vue.js : vue.js则是直接用在<script>标签中的,完整版本,直接就可以通过script引用. vue.common.js :预编译调试时,CommonJS规范的格式,可以 ...

  2. 虚拟机enp0s8网卡无法联网和开放linux端口

    1.虚拟机enp0s8网卡无法联网解决 在 VirtualBox 中安装好 centos7 后,发现使用 ping 命令测试连接外网 IP 地址,会报错,或者host-only网卡无ip,mobaXt ...

  3. Spring 的 IOC 和 AOP 的理解

    Spring 的 IOC 和 AOP 的理解: https://www.jianshu.com/p/bf1adc3b75e6 对Spring的核心(AOP和IOC)的理解(大白话) https://w ...

  4. centos7_安装jira7

    centos7 安装jira7 参考文档:http://www.cnblogs.com/kevingrace/p/7608813.html 1.准备环境 centos7 memory:8G stora ...

  5. Python - 使用 xlwt 写入表格

    # -*- coding: utf-8 -*- import xlwt def write_excel(): f = xlwt.Workbook() fenlei = ['一类','二类','三类', ...

  6. C++ 类中使用dllimport和dllexport

    在Windows平台下: 您可以使用dllimport或dllexport属性声明C ++类.这些形式意味着导入或导出整个类.以这种方式导出的类称为可导出类. 以下示例定义可导出的类.导出其所有成员函 ...

  7. WAIC | 奇点云携「酷炫AI应用」亮相2019世界人工智能大会

    你是否还在疑惑“人工智能可否改变世界?” 那么,你该有一些危机感了. 机器视觉.自然语言处理.智能语音.机器人问诊.智慧驾驶……这些AI技术及应用早已渗入了我们日常生活的点滴. 29日,以「智联世界, ...

  8. cs231n spring 2017 lecture5 Convolutional Neural Networks

    1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...

  9. freeRadius日志关闭

    vim /etc/raddb/radiusd.conf #file = ${logdir}/radius.log file = /dev/null vim /etc/raddb/modules/det ...

  10. labview程序结构

    三种范式:面向过程.面向事件,面向对象:六种模式:标准状态机.消息队列.生产者/消费者(事件).生产者/消费者(数据).用户界面事件处理.主/从 事件结构相当于是一个while语句里边嵌套了一个条件结 ...