【无标题】Qt笔记之信号和槽、数据类型的简介

信号与槽

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

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<bool>(&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<QSpinBox *>(sender());

数据类型

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

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

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

Qt数据类型等效定义字节数
qint8signed char1
qint16signed short2
qint32signed int4
qint64long long int8
qlonglonglong long int8
quint8unsigned char1
quint16unsigned short2
quint32unsigned int4
quint64unsigned long long int8
qulonglongunsigned long long int8
ucharunsigned char1
ushortunsigned short2
uintunsigned int4
ulongunsigned long8
qrealdouble8
qsizetypessize_t8
qfloat162

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

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

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

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

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

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值