iMX287A嵌入式Qt環境搭建

@[toc]html

1.嵌入式Qt簡介

Qt 是一個跨平臺的應用程序開發框架。使用Qt開發的應用程序,只須要編寫一套代碼,而後把這套代碼放在不一樣平臺的Qt環境去編譯,就會生成能夠運行在對應平臺的應用程序。例如,我在Windows寫了一個串口助手,這套代碼不用修改,放在Linux環境下的Qt開發環境,從新編譯,就能夠生成能夠在Linux環境下運行的串口助手,固然,Qt支持的環境有不少。不一樣平臺下的移植,只須要修改很小一部分或者不用修改就能夠直接運行。 在這裏插入圖片描述 嵌入式Qt,即QtE,屬於Qt Embedded Linux 分支平臺。Qt/E 所面對的硬件平臺較多,當開發人員須要在某硬件平臺上移植 Qt/E 時,須要下載Qt 源代碼,利用交叉編譯器編譯出 Qt 庫。接着須要將 Qt 庫複製兩份,一份放置在開發主機上,供編譯使用;一份放在目標板上,供運行時動態加載使用。 在這裏插入圖片描述linux

2.查看開發板Qt庫的版本

要想在開發板上運行Qt程序,首先板子上要有Qt的庫,並且要肯定這個的庫的版本。那麼怎麼看 開發板上的Qt庫是Qt-4.7.3版本的。可使用find搜索命令,搜索本地全部Qt相關的文件:shell

#進入到根目錄
cd /

#搜索qt相關的文件
find -name "*Qt*"
#或者
find -name "*qt*"

若是搜索結果有不少so類型的文件,說明這個開發板上的系統是支持Qt的,並且後面的數字就是當前Qt庫的版本號。 在這裏插入圖片描述 能夠看出,iMX287A開發板支持Qt,庫的版本是4.7.3。vim

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

又是"Hello World",不管學習什麼東西,都要先來個"Hello World",固然Qt也不例外。bash

3.1 主機搭建嵌入式Qt環境

搭建一個最基本的Qt環境,須要兩個東西:qmake和編譯器。編譯器用的是交叉編譯器,咱們在第一節的教程中,已經介紹了,而且已經把交叉編譯器的路徑添加到了環境變量。下面咱們就來安裝用來開發嵌入式程序的qmake。服務器

qmake包工具在光盤的位置:三、Linux\二、工具軟件\Linux 工具軟件\qt4.7.3.tar.bz2app

#進入到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上交叉編譯以後,把可執行文件傳輸到開發板上運行。less

#新建一個文件夾存放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

原文出處:https://www.cnblogs.com/whik/p/12411794.html

相關文章
相關標籤/搜索