• iMX287A嵌入式Qt环境搭建


    @

    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、Linux2、工具软件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 << "height:" << height;
        
    	//重新设置窗口充满整个屏幕
    	this->resize(width, height);
    	//设置窗口大小为屏幕的1/3
    //    this->resize(width/3, height/3);
    
    	//窗口位置移动到左上角
        this->move(0, 0);
    }
    

    我的公众号:mcu149

  • 相关阅读:
    day 24
    day23
    day 22
    java中空格的操作
    java 解析Word文档以及Excel表格数据带有图片(2003/2007)
    java中创建文件夹
    http请求问题
    js弹框显示全部内容
    java实现HTTP请求的三种方式
    solr与java整合使用
  • 原文地址:https://www.cnblogs.com/whik/p/12411794.html
Copyright © 2020-2023  润新知