@shell
Qt 是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只须要编写一套代码,而后把这套代码放在不一样平台的Qt环境去编译,就会生成能够运行在对应平台的应用程序。例如,我在Windows写了一个串口助手,这套代码不用修改,放在Linux环境下的Qt开发环境,从新编译,就能够生成能够在Linux环境下运行的串口助手,固然,Qt支持的环境有不少。不一样平台下的移植,只须要修改很小一部分或者不用修改就能够直接运行。
嵌入式Qt,即QtE,属于Qt Embedded Linux 分支平台。Qt/E 所面对的硬件平台较多,当开发人员须要在某硬件平台上移植 Qt/E 时,须要下载Qt 源代码,利用交叉编译器编译出 Qt 库。接着须要将 Qt 库复制两份,一份放置在开发主机上,供编译使用;一份放在目标板上,供运行时动态加载使用。
vim
要想在开发板上运行Qt程序,首先板子上要有Qt的库,并且要肯定这个的库的版本。那么怎么看
开发板上的Qt库是Qt-4.7.3版本的。能够使用find
搜索命令,搜索本地全部Qt相关的文件:bash
#进入到根目录 cd / #搜索qt相关的文件 find -name "*Qt*" #或者 find -name "*qt*"
若是搜索结果有不少so类型的文件,说明这个开发板上的系统是支持Qt的,并且后面的数字就是当前Qt库的版本号。
能够看出,iMX287A开发板支持Qt,库的版本是4.7.3。服务器
又是"Hello World",不管学习什么东西,都要先来个"Hello World",固然Qt也不例外。app
搭建一个最基本的Qt环境,须要两个东西:qmake和编译器。编译器用的是交叉编译器,咱们在第一节的教程中,已经介绍了,而且已经把交叉编译器的路径添加到了环境变量。下面咱们就来安装用来开发嵌入式程序的qmake。框架
qmake包工具在光盘的位置:三、Linux\二、工具软件\Linux 工具软件\qt4.7.3.tar.bz2
less
#进入到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环境搭建成功。工具
咱们来编写一个简单的界面,程序只显示一个标签,标签的内容是“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程序。
经过scp传输,NFS共享的方式把这个文件在开发板上运行:
在开发板上运行:
实际效果:
Qt 是一个跨平台的图形框架,在安装了桌面版本的 Qt SDK 的状况下,用户能够先在PC 主机上进行 Qt 应用程序的开发调试,待应用程序基本成型后,再将其移植到目标板上。
桌面版本的 Qt SDK 主要包括如下两个部分:
因为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安装某个库就能够了。
打开工具->选项->构建和运行
菜单,添加嵌入式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 上一步设置的对应工具名称
若是构建套件前面有红色或黄色的感叹号,说明构建套件没有设置成功。
构建套件设置完成以后,嵌入式Qt程序的开发就和桌面Qt程序的开发同样了:
使用scp或者NFS共享目录的方式把文件传输到开发板:
在开发板运行使用Qt IDE生成的可执行文件:
实际运行效果:
若是想使用鼠标来操做,要在系统上电以前,就把鼠标插上,若是在运行过程当中链接鼠标是不能使用的。
#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