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