linux 点灯 qt,ZedBoard上的点灯签名实验(七)QT图形界面(GUI)的配置和开发编译...

当前用QT来开发嵌入式图形界面越来越收到开发者的欢迎。如果用过微软的Visual Studio,那么再来开发PC版的QT,就很容易了。而为嵌入式平台开发GUI和其他的嵌入式工程一样,都需要交叉编译环境,搭建好交叉编译环境后,在PC上做好的GUI只需交叉编译一次就可以在嵌入式平台上运行了,PC版本的QT安装,我已经在博文中详细描述过了。为Zynq平台安装交叉编译环境的具体安装方法,官网(www.wiki.xilinx.com/Zynq+Qt+and+Qwt+Base+Libraries-Build+Instructions)上,有详细的描述,只要耐心的按照官网上的步骤一步步耐着性子做,就可以安装成功。需要指出的是,这一步是在PC上做的,而不是在开发板上做的,至少我是这样做的,make这一步是非常耗时的,大概要接近3个小时。印象中会出错的地方主要集中在配置也就是./configure这一步,官网如下,

bash> ./configure \

-embedded arm \

-xplatform qws/linux-arm-gnueabi-g++ \

-little-endian \

-opensource \

-host-little-endian \

-confirm-license \

-nomake demos \

-nomake examples \

-prefix $ZYNQ_QT_INSTALL

这一步大家尤其要注意的是,每一行命令前面的小段线,容易忘记而导致失败。安装好后,那么在我们的

PC上就有2个编译工具qmake, 在安装的过程中,我们已经将那个负责交叉编译的qmake加入环境变量,

也就是说我们在命令行中可以自动补全的qmake,就是交叉编译的qmake,而不是PC版的qmake,

那个qmake在运行PC QT的时候自动调动,它具体位置应该是,/opt/QT....../bin, 按官网一步步走到最后,

得到镜像qt_lib.img, 这是在开发板上运行qt工程必须的库文件,要拷到SDk卡上,在开发板上运行QT工程,

要先挂载这个镜像。做好这些后,可以先交叉编译一个Hello Word程序试试。我的效果图如下,

c9a15018f9913319bb6e27f5aa3fbd89.png

安装好了,交叉编译环境后,我们就可以开始为我们自定义的IP开发一个GUI了,打开PC版本的QT,如果使用CentOS系统的话,那么这是你的Qt Creator 肯定已经在 -->Applications-->Programming里边了,点击图标Qt Creator,打开Qt Creator, 当然你也可以自己到安装目录中找,然后运行可执行文件qtcreator。 Qt creator 是QT的工具之一,你也可以用designer,2者差不多。

Qt Creator 启动后,-->File-->New File or Project,然后选中Qt Gui Application, 接下来为我们的工程取好名字,找好存储位置。在生成的Form中,拖入几个元素如图,

95cdfabe7d951d904dbba201508bd02e.png

改变其中的PlainText和Object Name,改Objectname的目的是为了编程方便。几个Object中最中要的就是OK按钮, 它的objectname我改成了btn1, 改动好了以后,选中OK按钮,右键-->Go to Slot-->clicked(), 学过VB.net的朋友就很清楚了,我们这儿是为OK按钮设置了一个事件,当它被点击的时候,会运行一些程序,是那些程序呢,这时候Qt Creator会自动进入程序编辑页面,光标停留的位置,就是写程序的位置,我们在这儿入这样一行程序,

myled_write(ui->txt1-toPlainText().toInt());

意思是,当OK按钮被点击的话,就将UI中的元素txt1的PlainText转化成整型传递给函数myled_write, 那么, 前边我们写好了驱动,留好了API 也就是文件/proc/myled, 显然,函数myled_write的作用就是把PlainText的值写入文件/proc/myled, 这就变成C/C++语言下的文件操作了,这就不难实现了,你可以在相同界面下写好这个函数,也可以在相同目录下新建一个myled.h,然后include "myled.h", 注意这儿是" ", 而非<>. 在myled.h中写入下边的代码,

#ifndef myled_H

#define myled_H

#include

#include

#include

#include

#include

void myled_write(int led_value)

{

int nwrite;

char buff[2];

sprintf(buff,"%d",led_value);

nwrite = strlen(buff);

int fp = open("/proc/myled",O_WRONLY);

write(fp,buff,nwrite);

close(fp);

}

#endif // myled_H

大家知道,C语言中文件操作有2套函数,fopen, fread, fwrite等和read(), write(). 当然,linux下Shell脚本也可以实现相同的目的,比如命令echo, cat。这一切都做好后,首先在PC环境中调试,如果运行没有问题的话就可以开始交叉编译了,打开一个Terminal,然后cd到工程目录下, 运行命令 qmake -project, 没有错误的情况下,运行qamake, 这时在工程目录下看到Makefile, 接着make, 得到和工程名称相同的可执行文件,把它复制到开发板的SD卡上。之后把SD重新插到开发板上,给开发板上电,打开终端TeraTerm, 输入图中的命令。

fc9cdf3b4eafb1fbc2cb34a26a48aefe.png

大家可能已经注意到了,我已经设置好了程序自动运行,所以省去了挂载mmcblk0p1和insmod myled.ko的命令,直接就可以挂载qt_lib.img 还有运行QT工程了,最后再一次展示效果图。

f0a90e5ae81cc460efe40f3de39de54d.png

eb922dda15c4e26aedb0b0b4c218b568.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值