1  开发环境

  • 目标版:FS4412(Cortex-A9)开发板
  • 交叉工具链:arm-linux-gcc 4.6.4 版本
  • Qt:qt-everywhere-opensource-src-5.4.2.tar.xz
  • Linux:Ubuntu 16.04

2  QT源码配置、编译及安装

这里以 QT5.4.2 版本为例,在 Qt 官网下载 qt-everywhere-opensource-src-5.4.2.tar.xz 文件。

(1)解压:

# .tar.xz

(2)备份 qmake 配置文件:

# cp -a qtbase/mkspecs/linux-arm-gnueabi-g++/ qtbase/mkspecs/linux-arm-g++/

(3)修改 qmake 配置文件,指定交叉工具链:

# vim qtbase/mkspecs/linux-arm-g++/qmake.conf

将配置文件中所有的 arm-linux-gnueabi 都替换为 arm-linux。

(4)编辑一个自动配置的脚本文件(如 config.sh)存放在源码顶层目录下,并添加可执行权限。内容如下:

#!/bin/bash
./configure -release -opensource -confirm-license -qt-sql-sqlite -no-sse2 -no-sse3 -no-ssse3 -no-sse4. -no-sse4. -no-avx -no-avx2 -no-mips_dsp -no-mips_dspr2 -no-pkg-config -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-openssl -qt-pcre -qt-xkbcommon -no-glib -nomake examples -nomake tools -nomake tests -no-cups -no-iconv -no-dbus -xplatform linux-arm-g++ -no-use-gold-linker -qreal float
exit 

(5)执行配置:

# ./config.sh

配置成功后,会在最后打印如下信息:

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/Qt-5.4.2
Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

(6)编译以及安装:

# make
# make install

因为没有在配置中指定安装路径,所以使用的是默认的安装路径,即 /usr/local/Qt-5.4.2/。

3  在根文件系统中添加 Qt

(1)进入根文件系统目录,把安装好的Qt目录下的所有内容拷贝到根文件系统中:

# cd /home/rootfs/rootfs-fs4412
# mkdir usr/local
# / usr/local/

(2)然后编辑 etc 目录下的 profile 文件:

# Qt环境
export QTDIR=/usr/local/Qt-5.4.2
# 指定字体的路径
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
# 指定插件的路径
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
# 指定QT运行的平台,linuxfb指定帧缓存设备,size指定设备的分辨率,tty指定非GUI程序使用的tty
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x600:tty=/dev/ttySAC2
export PATH=$QTDIR/bin:$PATH
# 指定Qt库路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH$QTDIR:$QTDIR/lib

4  安装 Qt 集成开发环境 

Qt 的集成开发环境以 qt-opensource-linux-x64-5.4.2.run 为例。

(1)运行安装包:

# ./qt-opensource-linux-x64-.run

(2)指定安装路径:

(3)一路采取默认,至此,安装完成:

【温馨提示】在编译 Qt 代码时可能出现“error: GL/gl.h: No such file or directory”错误,需要使用下面命令安装库:

# apt-get install libqt4-dev

 5  添加 ARM 平台的构建环境

Qt集成开发环境安装后,默认只有PC机上的构建环境,需要手动添加 ARM 平台上的构建环境。

(1)指定 Qt 版本,选择“工具”->“选项”(增加qmake)

(2)指定编译器:

(3)增加构建套件:

设置完成后,点击“0K”,完成配置工作。

6  编写并运行 Qt 程序

(1)新建项目,“文件”->“新建文件或项目…”:

(2)编辑UI文件:

添加一个 Line Edit 和一个 Push Button,并将 Push Button 的显示的名称改为 Clear,将窗口的大小改为 1024x600,这样窗口可以布满整个显示屏。接下来为按钮添加槽函数,右击按钮,然后在弹出的菜单中选择 go to slot 子菜单即可。

在自动生成的槽函数中,添加如下的代码:

void MainWindow::on_pushButton_clicked() {
    ui->lineEdit->clear();
}

(3)代码编写完成后进行保存,然后先选择 PC 上的构建套件进行编译测试,点击下图中的三角形按钮即可运行。

测试成功后,在切换构建套件成 ARM,执行“构建”->“构建所有项目”。

(4)编译成功后,会在相应的目录生成可在开发板运行的可执行程序,拷贝到开发板即可运行。

# cp ./test /home/rootfs/rootfs-fs4412

将开发板接上 USB 的鼠标和键盘,然后上电,使用 NFS 挂载根文件系统,使用下面命令运行 Qt 程序:

# ./test  -plugin evdevmouse:/dev/input/event1 -plugin evdevkeyboard:/dev/input/event2

开发板上运行的程序功能将会和刚才在PC机上运行的程序功能一样。在命令行中通过 evdevmouse 指定了鼠标设备,通过 evdevkeyboard 指定了键盘设备。这些设备的路径需要根据系统的实际情况而定。

嵌入式QT移植的更多相关文章

  1. 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)

    目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for w ...

  2. 基于mini2440的Qt移植

    花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程. 移植环境: win7系统,虚拟机是ubuntu12.04 ...

  3. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

  4. 基于arm的嵌入式QT开发(课程设计)

    一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...

  5. 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式

    上文<嵌入式Qt开发-移植到ARM开发板 >介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互. 之前刚把一个qt程序移植到arm板上成功运行显示时就开心的 ...

  6. 【Linux开发】【Qt开发】ARM QT移植详细步骤教程

    ARM QT移植详细步骤教程 米尔SAM9X5和A5D3X上默认的Qt版本是4.5.3,当这个版本的Qt库不能满足实际开发需求时,可通过此方法制定Qt开发.运行环境. 移植的步骤如下: 1.下载新版q ...

  7. iMX287A嵌入式Qt环境搭建

    目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.第一个嵌入式Qt程序--Hello World 4.Linux桌面版本Qt环境的搭建 5.注意 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应 ...

  8. QT移植无法启动 This application failed to start because it could not find or load the QT platform

    QT配置好在自己机器上可以运行,但在别人机器上一直弹出 "This application failed to start because it could not find or load ...

  9. MISP版本嵌入式QT编译时出现mips-linux-gcc command not found

    configure的时候都没什么问题我的configure是:./configure -prefix /opt/qt-jz -xplatform qws/linux-mips-g++ -embedde ...

随机推荐

  1. 使用Q进行同步的Promises操作

    如何通过使用Q来并发执行多个promises呢? Q(Q(1), Q(2), Q(3)) .then(function (one, two, three) { console.log(one); co ...

  2. ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

    ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...

  3. Html5 移动端 触摸滑动事件

    以下代码经过测试  没有问题 且可以循环滑动 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"& ...

  4. 由浅入深SCF无服务器云函数实践

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:陈杰,腾讯云架构平台部技术专家 近年来,互联网服务从一开始的物理服务器托管,虚拟机,容器,发展到现在的云函数,逐步无服务器化,如下表所示. ...

  5. 关于在selenium 中 webdriver 截图操作

    package prictce; import java.io.File; import java.io.IOException; import org.junit.After; import org ...

  6. python的while循环

    age_of_laochuanzhang = 56 conut = 0 while True: if conut == 3: print("输入次数上限") break age = ...

  7. git>>>>1

    参考博客:http://www.cnblogs.com/wupeiqi/p/7295372.html - 版本控制,各行各业都需要 - 版本控制工具 - svn - git - git,软件帮助使用者 ...

  8. 常用SQL语句集合

    一.数据定义 1.创建新数据库:CREATE DATABASE database_name2.创建新表:CREATE TABLE table_name (column_name datatype,co ...

  9. [51nod1299]监狱逃离

    到现在还是不会写系列,直接贴题解了. http://www.51nod.com/question/index.html#!questionId=1157 #include<cstdio> ...

  10. 记忆化搜索 dp学习~2

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1331 Function Run Fun Time Limit: 2000/1000 MS (Java/ ...