ubuntu+Qt开发环境搭建

 2023-3-1     作者:杨阳     [nemail]    
[lablebox]

1、安装说明


通过在虚拟机+Ubuntu系统下安装Qt开发工具QtCreator,可以进行Qt相关的应用开发,并将应用程序运行于英创工控主板之上。QtCreator同时也可以支持非Qt的C/C++程序的开发。所以用户只需要在eclipse和QtCreator中选择一种进行环境搭建。


开发环境Eclipse(Linux版本)QtCreator(Linux版本)
支持程序类型C/C++C/C++,Qt程序


关于虚拟机+Ubuntu系统的安装,可以参考《ubuntu+eclipse开发环境搭建》一文(只需要参考Ubuntu系统安装的部分)。


本文适用于ESM6800E/H、ESM6802、ESM7000系列、ESM8000系列工控主板,主要介绍了windows下虚拟机+ubuntu中Qt开发环境搭建的详细过程,包括交叉编译工具链的安装,Qt工具安装以及配置。


本文所使用的安装包:

1、ESM7000-toolchain-x86_64.sh(交叉工具链安装包),本文以ESM7000为例,其他主板的交叉工具链安装包可以参考下面的表格:

主板型号工具链安装包
ESM6800E/HESM6800-toolchain-x86_64.sh
ESM6802ESM6802-toolchain-x86_64.sh
ESM7000系列ESM7000-toolchain-x86_64.sh
ESM8000系列ESM8000-toolchain-x86_64.sh


2、qt-creator-opensource-linux-x86_64-4.15.2.run(QtCreator安装包),安装的QtCreator仅仅是一个IDE集成环境,编程所使用的Qt库已经集成在了安装好的编译工具中。因此用户也可以使用别的QtCreator版本,不会对开发程序有任何影响。而已经安装过QtCreator的用户,就不用再重新安装了,可以直接跳到第4步,按照说明添加一套主板使用的编译环境。QtCreator安装包的下载地址:https://download.qt.io/official_releases/qtcreator/


以上安装文件均在产品光盘的“工具”文件夹中。


2、交叉编译工具链安装


1、打开VMvare,启动ubuntu,然后将前面提到的两个安装包复制到ubuntu的个人用户目录中,即/home/<用户名>,本文中为/home/emtronix,如下图:

1.png

  

2、建立/home/emtronix/tools/esm7000文件夹用于安装交叉工具链(本文以/home/emtronix/tools/esm7000为例,客户可以根据习惯自行建立文件夹),然后在命令行中进入到存放安装文件的目录中,输入命令:

$ ./ ESM7000-toolchain-x86_64.sh

启动交叉工具链的安装后,首先需要手动输入安装路径,指定到刚刚新建的目录中即可(本文是/home/emtronix/tools/esm7000),之后输入“y”以确认安装,如下图:

2.png


3、QtCreator安装


安装QtCreator有两种方法,第一种是使用Ubuntu系统自带的QtCreator软件,这种方法比简单方便,但是QtCreator软件本身的版本可能有一定滞后型,不过不会影响开发。安装方法如下:


1、在终端输入命令,首先安装依赖的软件,然后安装QtCreator:

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt-get install make build-essential

$ sudo apt-get install libxcb-xinerama0

$ sudo apt-get install qtcreator


如下图:

3.png


安装完成后,在终端输入qtcreator就可以启动QtCreator软件了。


第二种方法是针对想使用最新版本的QtCreator开发的用户,可以在网站https://download.qt.io/official_releases/qtcreator/下载最新版本的安装包,如果下载较慢,可以采用下载网站中提供的国内镜像下载网址。本文使用4.15.2版本为例(安装包为qt-creator-opensource-linux-x86_64-4.15.2.run),安装方法如下:


1、在终端输入命令,首先还是安装依赖的软件,然后进入到存放QtCreator安装包的目录中,并启动QtCreator的安装:

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt-get install make build-essential

$ sudo apt-get install libxcb-xinerama0

$ ./qt-creator-opensource-linux-x86_64-4.15.2.run

如下图:

4.png


2、安装程序启动后,会自动联网登录Qt账户,根据提示输入或者注册账户即可。如果网络无法连接,会等待超时后跳过登录账户的步骤,如下图:

5.png

  

3、等待Qt账户验证成功,继续点击“next”,直到输入安装路径的页面,用户可以根据习惯自行设置,本文使用的安装路径为/home/emtronix/tools/qtcreator-4.15.2,如下图:

7.png


4、选择需要安装的组件,按照默认配置即可。如下图:

8.png


5、然后继续“next”,直到开始安装,如下图:

9.png


6、安装完成以后,/home/emtronix/tools文件夹下可以看到“esm7000”和“qtcreator-4.15.2”两个文件夹,如下图(客户可以在自己指定的安装文件夹中看到这两个文件夹):

11.png


其中,我们后面要用到的qtcreator位于/home/emtronix/tools/qtcreator-4.15.2/bin/文件夹下,如下图:

10.png


4、QtCreator设置


交叉编译工具链和Qt安装完成以后,首先需要设置环境变量,然后启动qtcreator配置相关选项。


启动QtCreator


1、首先需要导入交叉工具链的环境变量,进入到交叉工具链的安装路径中:

$ cd ~/tools/esm7000

~代表用户目录/home/emtronix,本文以/home/emtronix/tools/esm7000为例,客户请进入自己的交叉编译工具链安装目录。

使用source命令导入environment开头的配置文件,这个文件包含了交叉工具链正常运行所需的环境变量:

$ source environment-setup-cortexa7hf-neon-poky-linux-gnueabi

环境变量配置文件都放在交叉工具链的安装目录下,并且以environment开头。各个主板型号对应的环境变量配置文件可参考下表:

主板型号对应环境变量配置文件
ESM6800E/Henvironment-setup-cortexa7hf-neon-poky-linux-gnueabi
ESM6802environment-setup-cortexa9hf-neon-poky-linux-gnueabi
ESM7000系列environment-setup-cortexa7hf-neon-poky-linux-gnueabi
ESM8000系列environment-setup-aarch64-poky-linux


2、导入环境变量后,进入到QtCreator的安装路径下,启动QtCreator:

$ cd ~/tools/qtcreator-4.15.2/bin/

$ ./qtcreator

如下图:


12.png

注:每次运行Qtcreator之前都必须重复这一步设置环境变量(设置交叉编译工具链的指向)。


配置QtCreator


1、启动Qtcreator以后打开“Tools”-“Options”,如下图:

ubuntu+Qt开发环境搭建.png

  

2、选择左边的“Kits”-“Compilers”,点击“Add”-“GCC”-“C”添加交叉编译工具,如下图:

image.png


继续设置新添加的C编译工具,将“Name”填写为“esm7000-GCC”(用户可自行修改),并选择“Compiler path”为交叉工具链安装目录下:“sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc”(用户需要根据实际安装的目录选择),然后点击“Apply”保存设置,如下图:

13.png

 

不同主板的交叉工具链对应的C编译工具可参考下表:

主板型号对应C编译工具(相对交叉工具链安装路径)
ESM6800E/Hsysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
ESM6802sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
ESM7000系列sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
ESM8000系列sysroot/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc

 

3、选择左边的“Kits”-“Compilers”,点击“Add”-“GCC”-“C++”添加交叉编译工具,如下图:

image.png


继续设置新添加的C++编译工具,“Name” 填写为“esm7000-G++”(用户可自行修改),并选择“Compiler path”为交叉工具链安装目录下:“sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++”,然后点击“Apply”保存设置,如下图:

14.png



不同主板的交叉工具链对应的C++编译工具可参考下表:

主板型号对应C++编译工具(相对交叉工具链安装路径)
ESM6800E/Hsysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
ESM6802sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
ESM7000系列sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
ESM8000系列sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-g++


4、选择左边的“Kits”-“Qt Versions”下的“Add”添加交叉工具链中的qmake,选择交叉工具链安装目录下的“sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake”。其中“Version name”命名为“ESM7000-qt5”(用户可自行修改),点击“Apply”保存Qt Versions设置,如下图如下图:

15.png


不同主板的交叉工具链对应的qmake路径可参考下表:

主板型号对应的qmake路径(相对交叉工具链安装路径)
ESM6800E/Hsysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake
ESM6802sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake
ESM7000系列sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake
ESM8000系列sysroots/x86_64-pokysdk-linux/usr/bin/qmake

  

5、选择左边的“Kits”-“Kits”页面下的“Add”,增加一组主板专用的编译配置,具体设置如下:

设置项设置内容说明
nameesm7000新建的Kits名称,客户可自行取名
Compiler CESM7000-GCC配置C编译工具
Compiler C++ESM7000-G++配置C++编译工具
Qt versionESM7000-qt5选择Qt版本

  

以上设置均对应前面几步设置的名称,实际设置时用户选择自己填写的名称即可,如下图所示:

16.png

这一步完成以后,开发环境设置即进行完毕,之后就可以用qtcreator进行开发了。


在较高版本的QtCreator(目前测试在4.15版本及其以上)中,编辑界面的代码可能会有很多报错和警告的信息,可以选择QtCreator中的Help->About Plugins,如下图:

image.png


然后取消其中的ClangCodeModel项,重启一次QtCreator即可:

17.png

  

需注意的是,每一次启动qtcreator之前,都必须重复步骤4.1,进行环境变量设置(设置交叉编译工具链的指向)。


开发实例


非QT程序


1、启动Qtcreator,选择“File”-“New File or Project”新建工程,选择Non-Qt Project下的”Plain C++ Application”命令行程序。


ubuntu+Qt开发环境搭建.png

  

2、依次设置好工程名和路径,设置编译器为qmake,选择设置的kit(见文章4.5节),点击finish,创建好新工程(以上设置均可选择默认设置)。

ubuntu+Qt开发环境搭建.png

  

3、选择“Build”-“Build Project”,编译工具,即可在设定的编译目录中看到编译好的可执行程序。


4、参考开发光盘中例程,以串口例程step2_serialtest为例,拷贝main函数代码到工程中,工程中添加头文件“serial.h”和源文件“serial.cpp”,因为工程里用到了pthread库中的接口函数,所以需要在工程中添加pthread库。

ubuntu+Qt开发环境搭建.png

  

5、参考开发光盘中《使用必读》,将编译好程序放置到工控主板挂载目录中运行,可以看到工控主板打印的程序信息(可以短接串口ttyS2收发脚自发自收测试)。


qt界面程序


1、启动Qtcreator,选择“File”-“New File or Project”新建工程,选择”Qt Console Application”界面程序。

ubuntu+Qt开发环境搭建.png

  

2、依次设置好工程名和路径,设置编译器为qmake,选择设置的kit(见文章4.5节),点击finish,创建好新工程(以上设置均可选择默认设置)。

ubuntu+Qt开发环境搭建.png

  

3、点击Forms中.ui文件,即可进入Design界面。

ubuntu+Qt开发环境搭建.png

  

4、拖动控件,设置相应控件参数。以串口例程为例: 

ubuntu+Qt开发环境搭建.png

  

5、添加控件的响应代码,以“打开”按钮为例:

该按钮名为pushButton_2的QpushButton

ubuntu+Qt开发环境搭建.png

右键点击按钮,选择“Go to slot”

ubuntu+Qt开发环境搭建.png

选择事件,这里选按钮的点击事件,即可编辑响应函数。

void MainWindow::on_pushButton_2_clicked()
{
    int     port;
    int     baud;
    char    databits;
    char    stopbits;
    char    parity;
    port = ui->comboBox->currentIndex()+1;
    switch (ui->comboBox_2->currentIndex()) {
    case 0:
        baud = 4800;
        break;
    case 1:
        baud = 9600;
        break;
    case 2:
        baud = 115200;
        break;
    default:
        baud = 115200;
        break;
    }
    switch (ui->comboBox_3->currentIndex()) {
    case 0:
        databits = '7';
        break;
    case 1:
        databits = '8';
        break;
    default:
        databits = '8';
        break;
    }
    switch (ui->comboBox_4->currentIndex()) {
    case 0:
        stopbits = '1';
        break;
    case 1:
        stopbits = '2';
        break;
    default:
        stopbits = '1';
        break;
    }
    switch (ui->comboBox_5->currentIndex()) {
    case 0:
        parity = 'O';
        break;
    case 1:
        parity = 'E';
        break;
    default:
        parity = 'N';
        break;
    }
    m_Serial.m_ExitThreadFlag = 0;
    int iRet;
    iRet = m_Serial.OpenPort(port, baud, databits, stopbits, parity);
    if(iRet<0)
    {
        printf("serial open fail\n");
        return;
    }
    m_Serial.m_ExitThreadFlag = 0;
    m_Serial.m_pThread = new Thread;
    m_Serial.m_pThread->m_pSer = &m_Serial;
    connect(m_Serial.m_pThread, SIGNAL(RevSignal(char*,int)), this, SLOT(RevSlot(char*,int)));
    m_Serial.m_pThread->start();
    ui->pushButton_2->setEnabled(false);
    ui->pushButton_3->setEnabled(true);
}


编辑完代码后,点击build,编译好程序。


6、将编译好程序放置到工控主板挂载目录中运行,即可调试带界面程序。


示例程序在光盘中,也可联系英创工程师获得。

[lablebox]