1. wxWidget
标准的C++库
2. gtk++
C库
3. Qt
标准的C++库,语法类似于java的Swing.QT不仅仅运行于桌面环境中,其已被Nokia收购,现已成为Stmbian系利的主要界面技术。
3.1 HelloWorld
.pro文件:工程文件(project),它是qmake自动生成的用于生产makefile的配置文件
//需要引用的头文件
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
//第一行和第二行一样,头文件引用,类似于Java的import机制。Qt中头文件和类名一致,所以要使用某个类的话,它的类名就是头文件名。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);//创建一个QApplication对象,该对象用于管理应用程序级别的资源。 QApplication的构造函数有两个参数,来自main
QLabel *label = new QLabel("Hello,world!");
//创建QLabel对象,并能够显示Hello,world!的字符串
//用于显示文本
label->show();
//MainWindow w;
//w.show();
return a.exec();
}
3.2 信号槽
#include <QtGui/QApplication>
#include <QtGui/QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton *button = new QPushButton("Quit");
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()));
//QOcject是所有类的根,Qt使用QObject实现了单根继承C++,其中connect静态函数用于连接信号槽
button->show();
return a.exec();
}
Qt使用信号槽机制完成了事件监听操作。这与Swing里边的listener机制类似。
3.4 Meta-Object系统
此系统的两个关键作用:信号槽和内省。内省又叫做反射,允许程序在运行时获得类的相关信息 即meta-information(元信息,指类的名,属性,方法,信号列表,槽列表等)
标准C++并没有Qt的meta-information所需要的动态元信息。因此,QT提供了独立的工具moc,通过定义Q_OBJECT宏实现到标准c++函数的转变。moc使用纯C++实现,可在任何编译器中使用,此机制工作过程:
首先,Q_OBJETCT宏声明了一些QObject子类必须实现的内省函数,如metaObject(),tr(),qt_metacall()等;
第二,Qt的moc工具实现Q_OBJECT宏声明的函数和所有信号;
第三,QObject成员函数connect()和disconnect()
使用这些内省函数实现信号槽的连接。
以上这些过程是qmake,moc,QObject自动处理的。