snifer

【原创】编译QT/E设备上运行

0
阅读(1830)

今天一天遇到很多事情,下午静下心来,编译 QT/E 程序到ARM 设备上运行,今天就写写如何实现。

QT 编程扩展

一、编写自定义的信号与槽

1、将上个实验的目录复制出另一份并改名为testmyqt-x11

[root@localhost uptech]# cp testqt-x11/ testmyqt-x11 -arf

[root@localhost uptech]# ls

QT4 hello testmyqt-x11 testqt-x11

[root@localhost uptech]#

2、编辑自己定义槽函数的头文件myqt.h

包含ui_testx11.h 头文件,继承其控件类,定义自定义函数文件处理函数MyDlg(),并添加自定义函数槽ShowInfo()

即可。

[root@localhost testmyqt-x11]# ls

main.cpp testx11.ui

[root@localhost testmyqt-x11]#

手动编写myqt.h

[root@vm-dev testmyqt-x11]# vi myqt.h

#ifndef __DLG_H__

#define __DLG_H__

#include <QDialog>

#include <ui_testx11.h>

class MyDlg : public QDialog

{

Q_OBJECT

public:

MyDlg();

public slots:

void ShowInfo();

private:

Ui::Form ui;

};

#endif

编辑myqt.cpp 文件进行函数功能实现

其中ShowInfo()函数槽中定义改变textEdit 的内容为“Welcome to UP-TECH”

[root@vm-dev testmyqt-x11]# vi myqt.cpp

#include "myqt.h"

MyDlg::MyDlg()

{

ui.setupUi(this);

QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(ShowInfo()));

QObject::connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(close()));

}

void MyDlg::ShowInfo()

{

ui.textEdit->setHtml(QApplication::translate("Form", "<!DOCTYPE HTML PUBLIC

\"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"

"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"

"p, li { white-space: pre-wrap; }\n"

"</style></head><body style=\" font-family:'Sans Serif'; font-size:10pt;

font-weight:400; font-style:normal;\">\n"

"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px;

margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\"

font-size:12pt; font-weight:600; color:#55aaff;\">Welcome to

UP-TECH</span></p></body></html>", 0, QApplication::UnicodeUTF8));

}

3、重新编辑main.cpp 函数

包含自定义头文件并使用自定义的类对象进行QT 实现

[root@vm-dev testmyqt-x11]# vi main.cpp

#include <QApplication>

#include "myqt.h"

int main(int argc, char **argv)

{

QApplication app(argc, argv);

MyDlg *mydlg = new MyDlg;

return mydlg->exec();

}

查看当前目录文件

[root@localhost testmyqt-x11]# ls

main.cpp myqt.cpp myqt.h testx11.ui

[root@localhost testmyqt-x11]#

全部源文件已经准备好,接下来使用QT/E 环境编译程序(当然如果想在宿主机X11 环境下编译该程序也可,只是更

改编译器的qmake 工具即可,如上一个QT/X11 实验)。

4、使用qmake –project 命令生成工程文件:

[root@localhost testmyqt-x11]# /usr/local/Trolltech/Qt-embedded-4.4.0/bin/qmake

-project

[root@localhost testmyqt-x11]# ls

main.cpp myqt.cpp myqt.h testmyqt-x11.pro testx11.ui

[root@localhost testmyqt-x11]#

5、使用qmake 生成Makefile 文件:

[root@localhost testmyqt-x11]# /usr/local/Trolltech/Qt-embedded-4.4.0/bin/qmake

[root@localhost testmyqt-x11]# ls

Makefile main.cpp myqt.cpp myqt.h testmyqt-x11.pro testx11.ui

[root@localhost testmyqt-x11]#

6、make 编译程序

[root@localhost testmyqt-x11]# make

生成可执行程序testmyqt-x11

[root@localhost testmyqt-x11]# ls

Makefile main.o moc_myqt.o myqt.h testmyqt-x11 testx11.ui

main.cpp moc_myqt.cpp myqt.cpp myqt.o testmyqt-x11.pro ui_testx11.h

[root@localhost testmyqt-x11]#

可以使用file 查看文件属性,以免与X11 程序混淆,如:

[root@localhost testmyqt-x11]# file testmyqt-x11

testmyqt-x11: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses

shared libs), for GNU/Linux 2.6.14, not stripped

[root@localhost testmyqt-x11]#

确保是ARM 处理器的ELF 可执行文件。

7、将其拷贝到上述过程搭建好的NFS 共享目录:

[root@localhost testmyqt-x11]# cp testmyqt-x11

/UP-Magic6410/Trolltech/Qt-embedded-witheabi4.3.1-4.4.0/

二、在ARM 端运行程序测试:

1、启动UP-Magic6410 实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。

[root@UP_6410 yaffs]# mountnfs 192.168.1.145:/UP-Magic6410 /mnt/nfs/

2、设置环境变量 (ARM 端)

进入QT/Embedded 实验NFS 共享目录Trolltech 中

[root@UP_6410 yaffs]# cd /mnt/nfs/Trolltech/Qt-embedded-4.4.0/

[root@UP_6410 Qt-embedded-4.4.0]# ls

bin include mkspecs translations

etc lib plugins

[root@UP_6410 Qt-embedded-4.4.0]#

根据此实验目录下的目录进行ARM 端环境变量设置,如下:

[root@UP_6410 Qt-embedded-4.4.0]# export QTDIR=$PWD

[root@UP_6410 Qt-embedded-4.4.0]# export LD_LIBRARY_PATH=$PWD/lib

[root@UP_6410 Qt-embedded-4.4.0]# export TSLIB_TSDEVICE=/dev/event1

[root@UP_6410 Qt-embedded-4.4.0]# export TSLIB_PLUGINDIR=$PWD/lib/ts

[root@UP_6410 Qt-embedded-4.4.0]# export TSLIB_CONSOLEDEVICE=none

[root@UP_6410 Qt-embedded-4.4.0]# export TSLIB_CONFFILE=$PWD/etc/ts.conf

[root@UP_6410 Qt-embedded-4.4.0]# export POINTERCAL_FILE=$PWD/etc/ts-calib.conf

[root@UP_6410 Qt-embedded-4.4.0]# export QWS_MOUSE_PROTO=tslib:/dev/event1

[root@UP_6410 Qt-embedded-4.4.0]# export TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf

[root@UP_6410 Qt-embedded-4.4.0]# export QT_QWS_FONTDIR=$PWD/lib/fonts

[root@UP_6410 Qt-embedded-4.4.0]# export

3、执行程序

[root@UP_6410 Qt-embedded-4.4.0]# ./testmyqt-x11 –qws –font unifont

观察UP-Magic6410 型设备LCD 输出QT 程序界面

备注:上诉提到的实验源码testmyqt-x11 已经在产品光盘中(/UP-Magic6410/SRC/gui/demo 目录)提供,用户可以省去编写代码时间。

实验效果:

blob.png

可以点击相关按钮,测试自定义信号槽的事件响应。

今天就写这么多,希望明天能有好的心情,谢谢大家。