QT学习(1)——库

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自动处理的。

猜你喜欢

转载自blog.csdn.net/xu1129005165/article/details/81285403