iMX287A嵌入式Qt環境搭建
- 2020 年 3 月 4 日
- 筆記
@
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: " << width << "height:" << height; //重新設置窗口充滿整個螢幕 this->resize(width, height); //設置窗口大小為螢幕的1/3 // this->resize(width/3, height/3); //窗口位置移動到左上角 this->move(0, 0); }
我的公眾號:mcu149