@
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
