QT学习_常用类及信号和槽
Posted Leslie X徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习_常用类及信号和槽相关的知识,希望对你有一定的参考价值。
Qt
Qt常用类
- QObject的介绍
- QObject是所有QT对象的基类。
- 所有继承自QObject的类产生的对象都可以使用信号和槽机制进行通讯。
- 所有继承自QObject的类产生的对象都有QT框架提供内存管理机制支持
- QWidget的介绍
- QWidget是QT中所有用户接口的基类。
- 所谓用户接口就是与图形化界面相关的类。用户接口能接收鼠标键盘等事件。一般而言只要能在显示屏上显示的都是用户接口。
- 例如QLabel就是一个用户接口
- 所有的用户接口都是矩形的。其上层的用户接口会遮盖下层的用户接口。
- QString的介绍
- QString用于提供Unicode编码格式的字符串。
- Unicode和ASCII类似,但是还支持除英文字母意以外的文字比如汉字日文等。
- 使用方式和std::string类似
- 以下函数都被重写,可直接使用
QDebug->cout
QString->string
Qvector->vector
QMap->map
内存管理
- 内存管理的概念
- 常见内存管理机制:
- 垃圾回收机制(Java)
- 手动(C/C++)
- ARC(Object-C)
- 对象树(QT)
- QT对象树
- QT提供了一种机制能自动的管理继承自QObject的对象的内存资源,即对象树
- 当创建QT对象时可以在构造函数中指定父对象,若不指定则父对象为空。
- 指定了父对象的QT对象会在父对象的内存回收时自动被回收。
信号和槽
- 信号的概念
- 在继承自QObject的类中,还有信号成员。
- 信号成员会在满足一定条件时某个对象自动触发该对象的信号(触发条件可以通过QT帮助文档进行查看每个类中标示了signals的栏位),触发后程序会调用与信号相连接的槽函数。
- 槽函数的概念
- 在继承自QObject的类中,还有槽函数(可以通过QT帮助文档查看每个类中标示了slots栏位)。
- 槽函数使用时和类的成员函数没有区别。
- 槽函数除了能通过代码手动调用外,还可以通过与信号连接来通过信号调用。
- 信号与槽连接
- 可以使用QObject的静态成员函数connect来对信号和槽进行连接。
- 当sender对象的signal信号触发时,receiver对象的method函数会自动调用
- 自定义信号
- 定义:
class类名:public QObject{
Q_OBJECT
//其他成员
signals:
void 信号名(参数列表);
};
- 当需要信号条件满足时,可以使用如下方法发出信号
emit 信号名(参数值);
信号参数列表里的值会拷贝到所连接的槽函数的参数列表中。
- 自定义槽函数
- 定义:
class类名:public QObject{
Q_OBJECT
//其他成员
public slots:
void 槽名(参数列表);
};
示例:
#include <QObject>
#include <QDebug>
class SigObject: public QObject
{
Q_OBJECT
public:
SigObject(QObject* parent = 0);
void sendVoid();
void sendInt(int value);
signals:
void sigVoid();
void sigInt(int i);
};
class SlotObject: public QObject
{
Q_OBJECT
public:
SlotObject(QObject* parent = 0);
public slots:
void onSigVoid();
void onSigInt(int value);
}
SigObject(QObject* parent)
:QObject(parent)
{
}
SigObject(QObject* parent)
:QObject(parent)
{
}
void SlotObject::onSigVoid()
{
qDebug()<<"slotVoid()";
}
void SlotObject::onSigInt(int value)
{
qDebug()<<"slotInt:"<<value;
}
void SigObject::sendVoid()
{
emit sigVoid();
}
void SigObject::sendInt(int value)
{
emit sigInt(value);
}
int main(int argc, char** argv)
{
QApplication app(argc,argv);
SigObject sigObj;
SlotObject slotObj;
//信号和槽的连接
QObject::connect(&sigObj,SIGNAL(sigVoid()),
&slotObj, SLOT(onSigVoid()));
QObject::connect(&sigObj,SIGNAL(sigInt(int)),
&slotObj, SLOT(onSigInt(int)));
//发送信号
sigObj.sendVoid();
for(int i=0;i<5;i++)
{
sigObj.sendInt(i);
}
return app.exec();
}
以上是关于QT学习_常用类及信号和槽的主要内容,如果未能解决你的问题,请参考以下文章