信号与槽

信号与槽是元对象系统支持的,对象间通信所采用的机制。

connect函数使用:

connect(发送者,信号,接受者,实现);

connect(const QObject *sender,const char * signal, const QObject *receive, const char *member,Qt::ConnectionType = Qt::AutoConnection) ;

如果信号和槽函数都存在重载的情况,则需要使用qOverload<参数类型>进行指定; 例:

void temp(bool checked);

void temp();

connect(ui->checkBox,&QCheckBox::clicked,this,qOverload(&Widget::temp);)

connect(ui->checkBox,&QCheckBox::clicked,this,qOverload<>(&Widget::temp);)

最后一个参数:Qt::ConnectionType表示了信号和槽的关联方式 Qt::AutoConnection(缺省值):自动确认关联方式;(如果第五个值不填的话,默认是这个) Qt::DirectConnection :信号被发射时,槽立即执行,槽函数与信号在同一线程。 Qt::QueuedConnection :事件循环回到接收者线程后执行槽,槽与信号在不同线程。 Qt::BlockingQueueConnection :与Qt::QueuedConnection相似,信号线程会被阻塞直到槽函数执行完毕。当槽函数与信号在同一线程,会造成死锁。

disconnect() 函数的使用

1,解除一个 sender所有signal的连接

disconnect(myObject,nullptr,nullptr,nullptr);//静态函数

myObject->disconnect(); //成员函数

2,解除一个与特定信号的所有连接

disconnect(myObject,SIGNAL(mySignal()),nullptr,nullptr);

myObject->disconnect(SIGNAL(mySignal()));

3,解除一个特定的receive的所有连接

disconnect(myObject,nullptr,myReceive,nullptr);

myObject->disconnect(myReceive);

4,解除一对特定的信号和槽的连接

disconnect(lineEdit,&QLineEdit::textChanged,label,&QLabel::setText);

sender()函数

在槽函数里,使用QObject::sender()可以获取信号发送者的指针

QSpinBox *spinbox = qobject_cast(sender());

数据类型

Qt的数据类型,确保在每个平台上各数据类型都有统一长度 qreal缺省是8各字节double类型浮点数,如果Qt使用-qreal float 选项进行配置,就是4字节float类型浮点数。

qfloat16是Qt5.9.0中新增的一个类,用于表示16位浮点数,使用它需要包含头文件

qsizetype是Qt5.10中增加的一种类型,等效于POSIX标准中的ssize_t,表示有符号整数。

Qt数据类型等效定义字节数qint8signed char1qint16signed short2qint32signed int4qint64long long int8qlonglonglong long int8quint8unsigned char1quint16unsigned short2quint32unsigned int4quint64unsigned long long int8qulonglongunsigned long long int8ucharunsigned char1ushortunsigned short2uintunsigned int4ulongunsigned long8qrealdouble8qsizetypessize_t8qfloat162

Q_UNSUED(name):这个宏用于在函数中定义不在函数体里使用的参数

Qt的元对象系统(Qt的核心部分)

Q_Objedct类是所有使用元对象系统的类的基类; 必须在一个类的的开头部分插入宏Q_OBJECT,才可以使用元对象系统的特性;

对象树:表示对象间从属关系的树状结构;QObject提供了parent()、children()、findChildren();对象树中的某个对象被删除时,它的子对象也将被删除。

属性系统:可以使用宏Q_PROPERTY定义属性,QObject的setProperty()会设置属性值或者定义动态属性;property函数会返回属性值

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。