【精品博文】编译QT/E设备上运行
今天一天遇到很多事情,下午静下心来,编译 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 目录)提供,用户可以省去编写代码时间。
实验效果:
可以点击相关按钮,测试自定义信号槽的事件响应。
今天就写这么多,希望明天能有好的心情,谢谢大家。