Qt Jambi 4.4.3文档翻译:Qt Jambi教程2-让它退出,Qt Jambi Tutorial 2 – Calling it Quits

Qt Jambi 4.4.3文档翻译:Qt Jambi教程2-让它退出,Qt Jambi Tutorial 2 – Calling it Quits

文档原地址http://doc.trolltech.com/qtjambi-4.4/html/com/trolltech/qt/qtjambi-tutorial2.html

本文章来自飞豚扫描器的博客http://stupidbeauty.com/AirPhin

[前一: Qt Jambi教程1 - 世界你好!][Qt Jambi教程][下一: Qt Jambi教程3 - 家族价值Family Values]

代码:

 

在第1 章里已经创建咯一个窗口,现在我们继续,让程序在用户告诉它的时候适当地退出。

另外,我们会使用一个更有激情的字体。我们给出这个程序的整个源代码

public class Quit

{

    public static void main(String args[])

    {

        QApplication.initialize(args);

 

 

        QPushButton quit = new QPushButton(“Quit”);

 

        quit.resize(80, 40);

 

        quit.setFont(new QFont(“Times”, 18, QFont.Weight.Bold.value()));

 

 

 

        quit.clicked.connect(QApplication.instance(), “quit()”);

 

        quit.setWindowTitle(“Calling It Quits”);

        quit.show();

        QApplication.exec();

    }

}

一行行地看

        QPushButton quit = new QPushButton(“Quit”);

这次,按钮显示的是Quit,那正是用户击按钮时程序要做的事

        quit.resize(80, 40);

我们为这个按钮设置了另一个大小,因为现在的文字 比”Hello world!”短一点。我们还可以使用QFontMetrics 来设置合适的大小,或者让QPushButton选 择一个合理的默认值。

        quit.setFont(new QFont(“Times”, 18, QFont.Weight.Bold.value()));

这里,我们为这个按钮选择一个新的字体:Times 字体族中的18点粗体字体。还可以改变整个 程序的默认字体,使用QApplication::setFont()就 行咯。我们从Weight 枚举值中获得它的值, 因为在构造函数里字体的大小是以整数的形式给定的

        quit.clicked.connect(QApplication.instance(), “quit()”);

我们将clicked 信号连接到QApplicationquit()信号槽上(QApplication.instance() 返回这个程序的唯一的QApplication 实例)。clicked是Signal0 类的一个实例,而quit()QApplication 中的一个常规方法,它使程序退出。当connect()被调用时,这2个QtJambiObject之间将建立起1个单向 的连接。当这个信号槽连接到这个信号之后,在这个信号上的某个方法被调用时就会调用quit()方法;这就叫做发射信号。在这个例子中,当用户用鼠标猛击按钮时,程序会退出。

每个Qt Jambi对象都能拥有信号signal)(用来发送消息)和信号槽(slot)(用来接收消息)。所有的部 件都是Qt Jambi 对象,因为它们继承咯QWidget,而那个东西间接地继承咯 QtJambiObject

这个信号/信号槽机制可能是 Qt Jambi 的最核心的特性咯。信 号与信号槽文档里对这个主题进行咯细节性的描述。

运行程序

当你运行这个程序时,你会看到一个比第1 章中的窗口更小的窗口,里面是一个更小的按钮

参见第1 章,以编译并且运行程序。

练习

试着改变窗口的大小。按那个按钮以关闭程序。

QPushButton 中有没有其它的信号可以连接到quit[提示QPushButtonQAbstractButton 中继承咯它的大部分功能]

Qt Jambi 4.4文档翻译:Qt Jambi教程1-世界你好!Qt Jambi Tutorial 1 – Hello World!

Qt Jambi 4.4文档翻译:Qt Jambi教程1-世界你好!Qt Jambi Tutorial 1 – Hello World!

[Qt Jambi教程][下一篇: Qt Jambi教程2 - 让它退出]

代码:

这第一个程序是一个简单的“世界你好”示例。它包含咯你为了弄出一个Qt Jambi程序所需的最少的东西。下面的图片就是这个程序的截屏。

package com.trolltech.examples.tutorial;

import com.trolltech.qt.gui.*;

一行行地研究

package com.trolltech.examples.tutorial;

import com.trolltech.qt.gui.*;

要使用 Qt Jambi 的类,你最少需要导入gui ,它包含咯QApplicationQApplication管 理程序里面用到的多种资源,在运行Qt Jambi 程序时,它是必需的。Gui代码包中含有 与图形用户界面相关的类,例如部件(widgets),它是一个可以用来处理用户输入和绘制图形的用户界 面对象.

    public static void main(String args[])

    {

main()方法是程序的入 口.在使用Qt Jambi 时,几乎总是这样的:main()只需要进行某 种初始化,再将控制转交给Qt Jambi 库,而那个库将会告诉程序用户做咯哪些动作.

args 参数就是命令行参 数列表.这是一个标准的Java 特性.

        QApplication.initialize(args);

每个Qt Jambi 程序都包含一个唯一的QApplication 实例,它是一个私有的QApplication 类成员.要创建这个实例,你就带着args 作为参数调用静态的initialize()方法;注意,args可能会被修改,因为Qt Jambi会将它能识别的命令行参数删除.查看QApplication.argv() 的文档,以了解细节.

QApplication 对象必须在使用Qt Jambi 中任何与图形用户界面相关的特性之前创建.

        QPushButton hello = new QPushButton(“Hello World!”);

这里,在QApplication 之后,出现咯第一条与图形用户界面相关的代码:创建咯一个按钮.

QpushButton是 一个图形用户界面的按钮,用户可以按下它再松开.程序猿可以改变它的全部外观以及很多细微的属性(例如 颜色),还可以改变这个部件的内容.一个QPushButton可 以显示一段文字或是一个 QIcon.

这个按钮被设置为显示文字”Hello world!”.因为我们没有指定父窗口(QPushButton 构造函数的第二个参数),所以这个按钮自己会成为一个窗口,带着它自己的窗口框架和标题栏.

        hello.resize(120, 40);

按钮被设置为宽120 像素、高40 像素(不包括窗口框架,那个东西是由窗口系统提供的)。我们可以调用QWidget.move()来为这个部件设 置一个特定的屏幕位置,但是我们不这么做,我们让窗口系统来选择一个位置。

        hello.setWindowTitle(“Hello World”);

用来显示这个按钮的窗口的标题是使用QWidget.setWindowTitle() 来设置的

        hello.show();

当你创建一个部件时,它是不可见的。你必须调用QWidget.show()来让它变得可见

        QApplication.exec();

    }

这就是main()将控制转交 给 Qt Jambi 的地方。当程序退出时QCoreApplication.exec() 就会返回(QCoreApplicationQApplication的 基类。它实现咯QApplication的核心非图形界面功能,可在开发非图形界面用户程序时使用)

QCoreApplication.exec() 中Qt Jambi接收并且处理用户和系统的事件, 再将它们传递给适当的部件。

你现在应该试着编译、运行这个程序。

教程的示例都位于Qt Jambi 的examples/tutorial 目录中。当你构建Qt Jambi 时,它们也被自动构 建。

如果你已经手动输入咯源代码,你就把它当作一个常规的 Java 程序来编译、运行(前提是你已经正确地安装好咯Qt Jambi,参见安装说明)。

javac com/trolltech/examples/tutorial/HelloWorld.java

java com.trolltech.examples.tutorial.HelloWorld

运行这个程序

当你运行这个程序时,你会看到一个小窗口,里面是一个按钮, 在那个按钮上有那句著名的话:“Hello world!”

练习

试试改变这个窗口的大小。按那个按钮。如果你在运行着 X11,那么试试使用-geometry选项来运行这个程序(例如-geometry 100×200+10+20)。

维基百科文章翻译:Linux无线工具,Wireless tools for Linux

维基百科文章翻译:Linux无线工具,Wireless tools for Linux

原文:http://en.wikipedia.org/wiki/Wireless_tools_for_Linux

来自维基百科, 自由免费的百科全书

无线工具

开发者(们)

Jean Tourrilhes

稳定版本

29 /2007 年9月 17 日;3 年前

操作系统

Linux

类型

网络工具

许可证

GNU GPL

网站

www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html

Linux无线工具是一个Linux命令(简单的文本模式的工具)的软件包,它希望能够使用Linux无线扩展来为无线设备的配置提 供支持。Linux 无线工具及Linux 无线扩展是由Jean Tourrilhes[1]维护的,并且由惠普赞助。

内容

 [隐藏]

[编辑]采用情况

它被包含在大部分基于Linux内核的操作系统发行版中。在很 多Linux 发行版中,都默认包含咯勒个软件包,或者是依据当前是否有无线网卡来决定是否包含勒个软件包。如果它没有被发行版自动安装,那么通常也很容易找到它的二进 制安装包。

[编辑]前端

由于在单个的任务中使用多个独立的命令是相对比较复杂的(例 如,iwlist和iwconfig一起使用,以寻找并且连接到一个无线接入点),所以某些人[2]建议使用GNOMEKDE提供的前端或者一个叫做NetGo 的程序来操作勒些设置项。

[编辑]软件中的工具

[编辑]ifrename

ifrename允许修改无线网络接口的名字,基于多个静态的标准来向每 个接口赋予一个固定名字。

默认地,接口的名字是动态赋值的,并且每个网络适配器都被会赋予第一个可用的名字 (eth0, eth1…),因为创建网络接口的顺序可能会变化。而ifrename允许用户决定某个网络接口应当拥有什么名字。它可以使用很多选择器(selectors)来匹配系统中的网络适配器的名字,最常见的选择器是接 口的MAC地址

ifrename必须在启用接口之前运行,这就是它在各种脚本中inithotplug)非常有用却很少被用户直接使用的原因。默认情况下,它使用/etc/iftab中定义的映射来对系统中当前所有的接口重命名

[编辑]iwconfig

iwconfig用来显示及修改网络接口的与无线操作相关的参数(例如接口名字频率SSID)。它也可以用来显示无线统计信 息(从/proc/net/wireless中提取)。

在免费的伯克利软件发行Berkeley Software DistributionUNIX操作系统中,iwconfig 的角色是由一个扩展的ifconfig命令来替代的

[编辑]iwconfig输出示例

下面的命令显示当前连接到的无线网络的信息

$ iwconfig eth1

eth1     IEEE 802.11g  ESSID:”OSU_PUB”  

         Mode:Managed  Frequency:2.427 GHz  Access Point: 00:0D:9D:C6:38:2D  

         Bit Rate=48 Mb/s   Tx-Power=20 dBm   Sensitivity=8/0  

         Retry limit:7   RTS thr:off   Fragment thr:off

         Power Management:off

         Link Quality=91/100  Signal level=-39 dBm  Noise level=-87 dBm

         Rx invalid nwid:0  Rx invalid crypt:860  Rx invalid frag:0

         Tx excessive retries:0  Invalid misc:39   Missed beacon:8

[编辑]iwevent

iwevent显示那些通过RTNetlink 套接字接收到的由驱动程序和配置的变化而产生的无线事件。每行显示一个特定的无 线事件,它描述的是在指定的无线接口上发生的事情。它不需要任何参数

[编辑]iwgetid

iwgetid报告当前使用的无线网络的ESSIDNWID或者接入点/小区(cell)地址。默认地,它会输出设备的ESSID,如果没有的话,它会输出设备的NWID。报告出来的信息与iwconfig 显示的是一样的, 但是iwgetid 更容易与各种脚本整合。

[编辑]iwlist

iwlist用来扫描可用的无线网络,并且显示出关于它们的那些不 会iwconfig 显示的附加信息。主要的参数是用来选择信息的种类的iwlist显示出与这个种类相关的详细信息,包括那些已经由iwconfig 显示出来的信息。

这个命令主要是用来产生附近的无线接入点和它们的MAC地址以及SSID的列表。

[编辑]iwlist输出示例

下面的屏幕对话显示出在扫描附近的无线接入点时得到的结果。

$ iwlist eth1 scan

eth1     Scan completed :

         Cell 01 – Address: 00:12:17:46:E6:AF

                   ESSID:”shutyourstupiddogup”

                   Protocol:IEEE 802.11bg

                   Mode:Master

                   Channel:1

                   Encryption key:off

                   Bit Rate:1 Mb/s

                   Bit Rate:2 Mb/s

                   Bit Rate:5.5 Mb/s

              &nbs

2010.6.5版本发布

源代码:https://sourceforge.net/projects/airphin/files/AirPhin-2010.6.5/AirPhin-2010.6.5.7z/download

Windows7预编译程序:https://sourceforge.net/projects/airphin/files/AirPhin-2010.6.5/AirPhinSetup-2010.6.5-Windows7.exe/download

  • 修正版本号
  • 添加二个配置项:
    • 扫描时间间隔
    • 刷新网络列表时间间隔
  • 更新信息后,自动调整表格各列宽度
  • 配置文件的位置修改到“~/.AirPhin”

无线网络扫描方式相关资料翻译

来源:http://www.wireless-center.net/Wireless-Internet-Technologies-and-Applications/1874.html

这里是其中的一段。

原文:

The IEEE 802.11 family station (shortened to 802.11 station) needs to first look for access points within its coverage range and synchronize with a specific BSS. There may be several IEEE 802.11 family systems in the same location, and the 802.11 station needs to lock onto a preferred or preconfigured BSS. To facilitate this, access points send out periodic information that is broadcast within their coverage area.

This periodic information is referred to as a beacon and contains information such as BSS ID (helps identify the BSS), ESS ID (identifies the ESS), PHY layer parameters, and the native clock of the access point. The 802.11 station can passively listen for all the beacons in a neighborhood and synchronize its clock with the access points. Once a list of valid beacons is obtained, the 802.11 station selects an access point based on a selection criterion (PHY layer parameters, ESS ID, and load in the system). This method of selection is known as passive scanning.

Another method is known as active scanning, where the 802.11 station proactively looks for access points in the neighborhood by sending probe requests. The access points that hear these probe requests respond with a probe response that contains broadcast information similar to the beacon frames mentioned earlier. Again, the 802.11 station selects the best BSS that fits its selection criteria.

译文:

IEEE 802.11协议族的站点(简称802.11站点)需要先寻找到它的接收范围内的接入点并且与一个特定的基本服务集(BSS)同步。可能在同一个地方会有多个IEEE 802.11协议族的系统,而802.11站点需要锁定到一个优选的或者预配置的基本服务集。为了帮助实现这一点,接入点定时在它们的信号范围内发送广播信息。

这个定时发送的信息被称为信标(Beacon),包含一些信息,例如基本服务集标识(用来区分基本服务集),扩展服务集标识(ESS ID,用来区分扩展服务集),物理层参数,接入点的时钟。802.11站点可以被动地接收附近所有这些信标帧并且将自己的时钟与接入点同步。一旦获取了一个可用的信标帧列表,该802.11站点就会依据一个选择标准(物理层参数,扩展服务集标识,系统负载)来选择一个接入点。 这种选择方法被称为被动扫描。

另一种方法被称为主动扫描,在这种方式中,802.11站点主动向周围发送探测请求(Probe Request)帧以寻找接入点。接听到这些探测请求的接入点会回复一个探测响应(Probe Response)帧,其中包含了与前面提到信标帧类似的广播信息。同样,该802.11站点依据自己的选择标准来选择最适合的基本服务集。

无线网络扫描方式的分类,文章翻译

原文在这里:http://www.wireless-center.net/WLANs-WPANs/2435.html

这里翻译的是其中的一段:

扫描

802.11标准定义了被动和主动扫描,而它们是一个无线网卡用来寻找接入点的方法。被动扫描是强制性的,每个网卡都扫描单个的信道,以寻找到最好的接入点信号。每隔一段时间,接入点会广播一个信标帧(Beacon),而无线网卡在扫描的时候接收到这些信标帧,并且记录下对应的信号强度。信标帧中包含关于该接入点的信息,包括无线服务集标识(SSID)以及支持的传输速率。无线网卡可以使用这个信息,加上信号强度,来比较各个接入点,以决定使用哪一个接入点。

可选的主动扫描是类似的,除了一点,无线网卡通过广播一个探测请求(Probe Request)帧来开始这个过程,而所有在信号范围内的接入点都会回复一个探测响应(Probe Response)帧。主动扫描使得一个无线网卡可以接收到接入点的立即响应,而不用等待信标帧的发送。然而缺点是,主动扫描给网络带来了附加的开销,因为要传送探测请求帧和探测响应帧。

被设置成特殊(ad hoc)模式的站点,也就是802.11标准所指的独立基本服务集。在这个模式中,某一个站点一直发送信标帧,以向新的站点提示网络的存在。传送信标帧的责任者是这样确定的:每个站点等待一个信标帧发送时间间隔以及一段随机的附加时间。如果一个站点等待了一个信标帧发送时间间隔以及一段随机的附件加时间之后,还没有收到另一个站点的信标帧,则该站点发送一个信标帧。这样就将发送信标帧的职责分发给了所有的站点。

802.11数据帧的类型

大的类型分为:管理帧(Management Frames)、控制帧(Control Frames)、数据帧(Data Frames)。

具体分类:

  1. 管理帧
    1. 信标(Beacon)
    2. 探测请求(Probe Request)
    3. 探测响应(Probe Response)
    4. 认证(Authentication)
    5. 连接请求(Association Request)
    6. 连接响应(Association Response)
    7. 拒绝认证(Deauthenticate)
    8. 断开连接(Disassociate)
    9. 重连接请求(Reassociation Request)
    10. 重连接响应(Reassociation Response)
  2. 控制帧
    1. 请求发送(RTS)
    2. 可以发送(CTS)
    3. 确认(Acknowledgment)
    4. 省电模式询问(PS-poll)
  3. 数据帧
    1. 数据(Data)
    2. 空(Null Frame)