紧接着上章未完结的,继续分析WpaGui类中的函数。

void processMsg(char *msg)

从名字 上可以看出,这是处理消息的函数,处理的消息当然是wpa_supplicant向上层传递的函数。从前面的文章的分析我们可以得知,控制 wpa_supplicant的主要发式就是使用特定接口,将特定的命令字符串传送过去,而wpa_supplicant作为反馈的是及时的字符串消息, 以及当完成某项任务后的消息。比如,当扫描完成后,wpa_supplicant就会发送WPA_EVENT_SCAN_RESULTS表示已经可以接受 扫描结果了。而该函数,自然就根据wpa_spplicant发送过来的消息做相对应的处理。

void processCtrlReq(const char *req)

用来处理界面上用户发出的请求,具体有UserDataRequest类来完成。

void receiveMsgs()

既然要处理消息,就首先要获得消息,该函数就是用来接受wpa_supplicant发送过来的消息。

void connectB()

从字面上来看,是用来进行连接的,其实如果用网络链接的术语来说,是进行关联,使用的是REASSOCIATE命令让wpa_supplicant去连接上无线网络。

void selectNetwork( const QString &sel )

用来选择无线网络,非常好理解,使用SELECT_NETWORK命令操作。

void enableNetwork(const QString &sel)

void disableNetwork(const QString &sel)

这两个函数是想对应的,在连接一个无线网络之前,首先要使这个网络的参数配置可用,如果不想使用,则可以使它不可用。分别使用ENABLE_NETWORK和DISABLE_NETWORK命令。

void editNetwork(const QString &sel)

void editSelectedNetwork()

void editListedNetwork()

配 置无线网络的各项参数,具体部分由NetworkConfig来完成,而editSelectNetwork()是配置选择好的无线网络,是通过调用 editNetwork()实现的,editListedNetwork()也同样是通过调用editNetwork()实现,作用是配置已经列出来的无 线网络。
void triggerUpdate()

触发更新,用来更新网络的状态和参数。

void addNetwork()

增加一个新的网络,一般可以用来连接隐藏的无线网络,具体实现也是由NetworkConfig()完成。

void removeNetwork(const QString &sel)

void removeSelectedNetwork()

void removeListedNetwork()

与上面配置无线网络的三个函数类似,但作用不同在于是移除无线网络的配置。当从一个地点到里另外一个地点后,原有的无线网络可能会不存在,但是它的配置参数依旧还存在,这时可以使用这几个函数来移除无线网络无效的配置。使用的是REMOVE_NETWORK命令。

void enableAllNetworks()

void disableAllNetworks()

简单的两个函数,使全部配置好的无线网络可用或不可用,是在原来的ENABLE_NETWORK和DISABLE_NETWORK命令基础上,加上all参数来表示对全部网络生效。

void removeAllNetworks()

移除全部网络,是REMOVE_NETWORK命令后加上all的参数实现。

void saveConfig()

其实配置一个网络,在过程中都是在内存中进行的,如果这是没有保存,关闭程序的话,当下次重新启动时,会发现认为配置好的网络参数依旧不存在。而saveConfig()函数的作用就是将内存中的配置保存到文件中,使用的是SAVE_CONFIG命令。

以上就是大部分WpaGui类中函数的分析,其实还有很多函数并没有详细介绍,但是有一部分是与win下套接字变成有关,我并不是非常了解,还有一部分只是单纯的与程序的运行,比如隐藏在系统托盘上等有关,对我们了解wpa_gui的整体框架并不是有很大的帮助。

最后可以总结下,其实wpa_gui就是为wpa_supplicant底层程序增加了一套Qt4的图形交互界面,而这样的构架可以在对未来我们实际项目的设计上有一定的帮助,比如如何做到后台功能和前台界面的分离,如何做到跨平台,都有某种程度的启发。

QTestLib教程

前言:跟QTestLib手册一样,防止资源浪费,大部分来自已翻译好的大牛文章,补充了新出现的基准测试,可以视为非完全原创。大牛翻译的版本:http://blog.chinaunix.net/u2/75387/showart_1286497.html

本教程介绍了如何使用QTestLib框架的一些特性,共分为五章:

1.编写一个单元测试程序

2.数据驱动程序

3.模拟GUI事件

4.重复GUI事件

5.编写一个基准测试程序 全文阅读 »

QTestLib 手册

前言:对文档部分的QTestLib做 了翻译,当完成第一遍时,发现有大牛已经完成了翻译,而且就语句和准确度而言,也比我到位,因此,重复部分即采用大牛的翻译,而本菜菜的翻译是新添加的内 容,如基准测试。其中,最后内容是准许协议,就学习来说,没多大意义,因此没有翻译,文档版本为4.5。附上大牛翻译地址:http://blog.chinaunix.net/u2/75387/showart_1226734.html

Nokia公司提供的QTestLib 框架,是一种对针对基于QT的应用程序或库的单元测工具。QTestLib提供了单元测试框架的全部基本功能,同时也提供了针对用户图形接口(GUI)测试的扩展功能。

内容目录:

  • QtestLib 特性
  • QtestLib API
  • 使用 QTestLib
    • 编写一个测试程序
    • 编译一个测试程序
    • QTestLib 命令行参数
      • 语法
      • 选项
    • 编写一个基准测试
  • 在Win CE上远程使用QTestLib
    • 使用 cetest
      • 语法
      • 选项
    • QtRemote
    • 约束条件
  • 第三方代码

全文阅读 »

Doxygen 是一个C++, C, Java, Objective-C、Python、IDL (CORBA 和 Microsoft flavors)、Fortran、VHDL、PHP、C#和D語言的文档生成器。可以运行在大多多数类Unix系統,以及Mac OS X操作系統和Microsoft Windows 。初始版本的Doxygen借鉴了一些老版本DOC++的代码;随后,Doxygen源代码由Dimitri van Heesch重写。
Doxygen是一個编写軟件參考文檔的工具。 该文档是直接写在代碼中,因此比较容易保持更新。 Doxygen 可以交叉引用文档和代碼,使文件的读者可以很容易地引实际的代碼。
KDE 使用Doxygen作为其部分文档且 KDevelop 具有內置的支持。 Doxygen的发布遵守GNU General Public License,并且是免费软件。

在Qt实际开发中,Qt助手是开发人员离不开的好帮手。Qt中有大量复杂的API以及API的使用方法,这些光靠人脑来记是不现实的。通过Qt助手,开发人员可以快速地找到需要的类以及API的详细说明,甚至是例子,而记录这些文档的文件类型就是qch,全名是“Qt Compressed Help”。

QtLab上对使用Doxygen生成文档,然后乎转换成qch文件有详细的教程,本文就是围绕教程结合实际操作对这一过程作介绍,也可以视为是原文的翻译。 全文阅读 »

要使用Qwt,就首先需要安装配置好Qwt的开发环境。作为开源项目,我们可以在Qwt的官方网站上获得安装源码包,地址为 http://qwt.sourceforge.net/。得到源码包的途径也有两种,一种是使用SVN直接下载源码仓库里的源码,另一种是进入项目页面 下载。如果进入项目页面下载源码包,可以选择下载zip格式或者tar.bz2格式的,考虑到是在Linux上安装,那么下载的源码包应为qwt- 5.2.0.tar.bz2

先对安装前的准备总结一下:

1.Qwt5.2.0源码包下载完毕

2.系统中应该已经安装配置Qt,虽然Qwt兼容Qt3Qt4,但是建议还是安装Qt4,目前本人安装的是4.5.3全文阅读 »

学习一样事物的第一步,就应该先知道这样事物是什么,学习Qwt同样也是如此。作为一项不是特别大众的技术,与Java.net相比,Qt使用的人数可以说是相当稀少的,同时对应,相关的技术资料的数量也同样不错,而且深度也不够。

因此,Qwt的大多数资料只能从它的官网上获得:http://qwt.sourceforge.net/

在上面,对于Qwt有了详细的定义:

The Qwt library contains GUI Components and utility classes which are primarily useful for programs with a technical background. Beside a 2D plot widget it provides scales, sliders, dials, compasses, thermometers, wheels and knobs to control or display values, arrays, or ranges of type double.

Qwt库包含GUI组件和公共的类,主要目标用于技术领域的编程。除了2D的容器部件外,还提供了刻度线,滑动条,仪器刻度表,指南针,温度计,控制显示值的轮转控制器和旋钮,数组或浮点数范围的数据源。

简单一句话概括,Qwt是基于Qt开发的第三方库,提供了一组绘制科学绘图的2D部件。由于是采用Qt开发的,所以也继承了Qt的夸平台特性。目前 为止,笔者已经在WindowsXPUbuntu Linux和嵌入式Linux上成功地运行了Qwt相关程序,证明了Qwt也同样具有跨平台特性。

在实际开发方面,Qwt是基于LGPL版权协议的开源项目,对于商业开发来说,是十分宽松的协议,可以放心地应用于实际商业项目中。不过,作为非盈利的开源项目,自然就没有所谓的技术支持,一旦出现问题全部要靠开发者自行解决。

目前Qwt的稳定版本为5.2.0,作为一个比较完善成熟的Qt第三方库,如果能够花较短的时间来掌握,对于未来的项目开发或者目前的Qt学习,都是有莫大的好处的。

萌生想好好写某方面知识体程的笔记很久了,长期以后,虽然不断地学习了很多知识,熟练了很多知识,但是却在事后没有好好整理。过了一段时间,发现生 疏了,于是很无奈地再去翻书,再去回忆。这一方面是个人懒散的性格使然,另一方面更主要的是,其实并没有真正把知识融汇贯通,没有形成自己的体系。

俗话说的好,好记性,不如懒笔头,当然自己写的字有时自己都看不下来,想了想,学习还是共享的好,放在blog上,既可以作为大家查考的资料,也可 以作为自己以后温书的笔记。计算机编程的知识是无限的,而人的一生是有限的,我想能在有限的一生学点自己感兴趣的东西,作出几个能让大家都记住的软件,人 生也就有了存在的价值。

当然,心里抱着一丝奢望,假如写的这些杂七杂八的笔记能有一天整理出书,那真是更加让人开心的事。有时,翻翻国内的技术书,真的很让人无奈,譬如 Qt,除了一本C++ GUI 编程 with Qt4和精通Qt4编程勉强可以入目,其他的书真是无法言喻。不能说作者不想好好写,但有时错字连篇,排版糟糕,真是难以想象是经过复杂的流程出版出来。

自己曾经经历过找资料的困难程序,越是不流行的技术就越少,有时官方文档里也不是说的很清楚,每当这时,看着满眼的英文,就无比痛恨没有好好学英语。现在已经慢慢渡过看文档的困难期,回想以前,也希望能够帮助正处在苦难中的广大技术人员能早日的掌握Qt,掌握Qw


第0章 筑基-背景知识
第1章 开光-Qwt的安装

1.1 Qwt在Linux下的安装

1.2 Qwt在Windows下的安装

1.3 Qwt移植到嵌入式Linux上

1.4 整合Qwt至QtCreator

第2章 融合-Qwt入门

2.1 hello Qwt

2.2 简单的曲线

2.3 各式各样的曲线

2.4 会动的各种曲线

第3章 心动-基本的Qwt部件

3.1 万物基础QwtPlot

3.2 显示信息QwtTextLabel

3.3 琳琅满目各种仪器部件

第4章 灵寂-创建一个柱状图程序

4.1 子类化QwtPlotItem

4.2 数据来源的生成

4.3 重载绘图事件

4.4 完整的柱状图显示

第5章 金丹-Qwt的数据

5.1 基本数据QwtData

5.2 双重数据QwtArrayData

5.3 间隔数据QwtIntervalData

第6章 元婴-Qwt的事件

6.1 Qwt事件类型QwtEventPattern

6.2 键盘事件

6.3 鼠标事件

第7章 出窍-Qwt与数据库链接

第8章 分神-Qwt的小技巧

第9章 合体-实战Qwt完成一个小项目

第10章 渡劫-Qwt的第三方应用

9.1 两极坐标部件库QwtPolar

9.2 3D部件库QwtPlot3D

9.3 数据分析和科学容器软件QtiPlot

第11章 大乘-Qwt全部类目录

大概的Qwt学习计划大纲,目前先以最基本的的入手,然后深入,目前Qwt学习,先完成已有的目录,只是初稿,随时调整大纲。


前言:非常漫长的过程,没有什么技术上的难点,关键在于细心。

摘要:在友善之臂QQ2440 ARM9开发版上移植了最新的qt-embedded-linux-opensource-src-4.5.1,并且使用了tslib1.4,总结下移植过程和出现的问题。

正文:

首先要有配置好的环境,本文使用的编译环境如下:

主机系统:Ubuntu 8.04
主机编译器:gcc 版本 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
交叉编译器:arm-linux-gcc-3.4.1
软件资源:

qt-embedded-linux-opensource-src-4.5.1.tar.gz

qt-x11-opensource-src-4.5.1.tar.gz

移植过程:

平时程序都是在PC上完成的,所以我们需要先安装X11版的Qt来获得qvfb这个工具。嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。

qt-x11-opensource-src-4.5.1编译安装过程:

1.解压文件

将qt-x11-opensource-src-4.51.tar.gz复制到/root/local/qt目录下,进行解压,在终端中进行如下操作:

#cd /root/local/qt 

#tar zxvf qt-x11-opensource-src-4.5.1.tar.gz

解压完成后,得到/usr/local/qt/qt-x11-opensource-src-4.5.1目录。下面就开始进行编译了。

2.编译及安装qt-x11-opensource-src-4.5.1

进入/usr/local/qt/qt-x11-opensource-src-4.5.1目录,进行编译安装。在终端中进行如下操作:

#./configure –qvfb

#make

#cd tools/qvfb

#make

#cd ../..

#make install

3.复制文件

make install完 成后,会在/usr/local目录下生成一个Trolltech目录,形成/usr/local/Trolltech目录,这是qt-x11- opensource-src-4.5.1安装后所在的目录,进入/usr/local/Trolltech会看到一个Qt-4.5.1的目录,将 /usr/local/qt/qt-x11-opensource-src-4.5.1/tools/qvfb目录下的qvfb相关文件拷贝到/usr /local/Trolltech/Qt-4.5.1/bin目录下,在终端中操作(确定当前目录是/usr/local/qt/qt-x11- opensource-src-4.5.1):

#cp tools/qvfb/qvfb* /usr/local/Trolltech/Qt-4.5.1/bin

qt-embedded-linux-opensource-src-4.5.1编译安装过程,为了程序开发的便捷性,我安装了x86版和arm版,先在PC上使用x86版和qvfb开发,完成以后再使用arm版交叉编译放到开发版上运行。

X86版安装过程:

1.解压文件

将 qt-embedded-linux-opensource-src-4.5.1.tar.gz复制到/root/local/qt目录下进行解压,解压 完成后,得到/usr/local/qt/qt-embedded-linux-opensource-src-4.5.1目录。将qt- embedded-linux-opensource-src-4.5.1重命名为qt-embedded-linux-opensource-src- 4.5.1-x86。再解压一下qt-embedded-linux-opensource-src-4.5.1.tar.gz,并重命名为qt- embedded-linux-opensource-src-4.5.1-arm,在终端中进行操作:

#cd /root/local/qt 

#tar zxvf qt-embedded-linux-opensource-src.tar.gz

#mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-x86

#tar zxvf qt-embedded-linux-opensource-src.tar.gz

#mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-arm

2.编译及安装qt-x11-opensource-src-4.5.1-x86

进入/usr/local/qt/qt-x11-opensource-src-4.5.1-x86目录,进行编译安装。在终端中进行如下操作:

#cd /usr/local/qt/qt-x11-opensource-src-4.5.1-x86

#./configure -qvfb

#make(gmake)

#make install(gmake install)

OKqt-x11-opensource-src-4.5.1-x86就编译好了。

3.编译及安装qt-x11-opensource-src-4.5.1-arm

安装这个是最为关键的,因为编译好后要把lib拷贝到板子上

对于触摸屏幕,我使用的是tslib1.4

交叉编译tslib过程如下:

解压到/home#./autogen.sh
#./configure --prefix=/home/duancp/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes (可以先生成个cache文件)

#make

#make install-strip //生成瘦身应用程序和库

编译qt-x11-opensource-src-4.5.1-arm

进入/usr/local/qt/qt-x11-opensource-src-4.5.1-arm目录,进行编译安装。在终端中进行如下操作:

#./configure " 

-release " 

-shared " 

-fast " 

-no-largefile " 

-qt-sql-sqlite " 

-no-qt3support " 

-no-xmlpatterns " 

-no-mmx " 

-no-3dnow " 

-no-sse " 

-no-sse2 " 

-no-svg " 

-no-webkit " 

-qt-zlib " 

-qt-gif " 

-qt-libtiff " 

-qt-libpng " 

-qt-libmng " 

-qt-libjpeg " 

-make libs " 

-nomake tools " 

-nomake examples " 

-nomake docs " 

-nomake demo " 

-no-nis " 

-no-cups " 

-no-iconv " 

-no-dbus " 

-no-openssl " 

-xplatform qws/linux-arm-g++ " 

-embedded arm " 

-little-endian " 

-qt-freetype " 

-depths 16,18 " 

-qt-gfx-linuxfb " 

-no-gfx-transformed " 

-no-gfx-multiscreen " 

-no-gfx-vnc " 

-no-gfx-qvfb " 

-qt-kbd-usb " 

-no-glib " 

-qt-mouse-tslib -I/home/cnnbboy/opt/include -L/home/cnnbboy/opt/lib 

之所以裁剪那么多参数,是因为开发版空间有限,只要完成我所需要的功能就可以了,之后配置环境变量,我的配置如下:

export QTDIR=/qq2440

export T_ROOT=/tslib

export PATH=$QTDIR/bin:$PATH

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=tslib:/dev/input/event0

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib

最后,运行qt的测试程序成功,移植OK了。

出现的问题:

运行测试程序中说缺少librt.so.1 libstdc++.so.6 libgcc_s.so.1这三个文件,这是因为交叉编译的环境不同,从主机上交叉编译器离得库里拷贝过去即可。

参考资料:

[1]http://cgy136652.blog.163.com/blog/static/36168728200932410649487/

[2]http://blog.chinaunix.net/u2/86708/showart_1924834.html

[3]http://blog.chinaunix.net/u2/75270/showart_1793535.html

[4]http://blog.chinaunix.net/u1/39383/showart_1853496.html

[5]http://www.isongzi.com/2009/05/23/qt-configure/

[6]http://read.pudn.com/downloads78/sourcecode/embed/296243/%E7%94%A8tslib%E6%A0%A1%E5%87%86%E8%A7%A6%E6%91%B8%E5%B1%8F%EF%BC%88%E6%88%90%E5%8A%9F%EF%BC%89.rtf__.htm
cnnbboy's Dream © Copyright 2009, All Rights Reserved.