QT核心特点
qt的元对象系统(meta-oject system)提供信号槽、运行时类型信息、动态属性系统。
元对象系统由3部分组成
1. qoject 类是所有使用元对象系统的类的基类。
2.在一个类的private部分声明Q_OBJECT宏,使类可以使用元对象的特性,如动态属性、信号槽。
3.MOC(元对象编译器)为每个QObject的子类提供必要的代码实现元对象系统的特性。
moc的作用就是讲qt特性的程序转换为标准c++兼容的形式。
元对象类是QMetaObject, 调用QObject::metaObject()函数就返回关联的元对象。
对于QObject及其子类,可以使用qobject_cast()函数进行动态投射。即类型转换。
QObject *obj = new QWidget;
QWidget *widget = qobject_cast<QWidget *>(obj );
属性的使用:只要知道属性的名称就可以通过QObject::property()读取属性值,并通过QObject::setproperty()设置属性值。
信号槽 connect不同参数形式
1.connect(this,&MainWindow::startGetDataThread,m_pGetDataThreadObj,&DataThreadObject::GetDataFromRTDB);
该方式信号名称唯一,没有参数不同而同名的两个函数。即唯一的startGetDataThread信号
2.connect(this,SIGNAL(sendPointer(MainWindow*)),m_pGetDataThreadObj,SLOT(getPointer(MainWindow*)));
该方式通用的方法,可带多个参数,但只有参数类型,无变量。
在槽函数中,使用QObject::sender()可以获取信号发送者的指针。可以结合qobject_cast()类型转换使用。
自定义信号的发射函数是:emit
qt全局定义
全局定义在<QtGlobal>头文件,包括基本类型、函数、宏。
基本类型: qint8 typedef signed char qint8;
函数:qMax、qMin 最大值、最小值。
宏:QT_ VERSION、Q_DECL_IMPORT、Q_DECL_EXPORT、Q_DECL_OVERRIDE
QT容器类
qt容器类比标准的stl更轻巧,速度更快。也可以作为只读容器被多个线程访问。
qt容器也是基于模板的类,如QList<T> . 但T不能是QObject或任何子类。 T必须是一个可赋值的类型,即提供一个缺省的构造函数、可复制构造函数、赋值运算符。
QList:以数组(array-list)的形式实现,在前或在后插入数据都很快,可以以下标索引方式访问。有点对应mfc 的carray.
QLinkedList 是链式列表(Linked-list),不是连续的内存,基于迭代器访问。有点对应clist
QVector 动态数组,以下标索引访问。 和QList几乎完全相同,但性能更好。对应cvector.
QMap<key,T> 一个间映射到一个值。
QString
将一个整数转换为不同进制的字符串。
Qstring setnum(int n,int base = 10); 或Qstring number(int n,int base = 10);
QString 采用Unicode编码,一个字符是一个16位的QChar。