9.11 小结

Qt的信号与槽函数的使用。主要是为了实现对象与对象间的通信。信号与槽函数都在头文件里面定义,返回值一般都为空,SIGNALS: 信号可以不用写实现,发送信号用emit关键字,信号必须是公有的。SLOTS: 槽函数必须写实现,不写实现会报错。自己的ui界面的槽函数可以为私有的,外面的槽函数一般写为公有的。

信号与槽的连接分为自动连接和手动连接。手动连接使用connect()函数,有五个参数,依次为发送信号的对象的指针,发送的信号,接收信号的对象的指针,接收方法,连接类型。也可以自己给自己发信号。例:connect(A,SIGNAL(signalA(int)), B, SLOT(slotB(int)));对象A给对象B发信号,连接类型主要有五种,不写的话就默认自动连接。

1.直连(DirectConnection):主要在同一线程中使用,信号发送,槽函数执行完在执行信号后面的内容。

2.排队连接(QueuedConnection):在多线程中,发送完信号就继续执行后面的内容,若槽函数前面有内容在运行,则槽函数等待前面的内容执行完才运行。主要是槽函数排队。

3.阻塞排队连接(BlockingQueuedConnection):与排队连接不同的是,发送完信号后等待槽函数执行完才执行发送信号后面的内容,其他的还是与排队一样,这个也是在多线程中使用。是信号阻塞。

4.自动连接(AutoConnection):自己判断是同一线程还是多线程,同一线程选择直连,多线程选择排队。如果要设置阻塞排队还是要自己写的。一般省略第五个参数就是默认自动连接。

5.唯一连接(UniqueConnection):主要是避免重复连接,一个信号和槽只连一次,只管写他前面的,写他后面的管不了,可以按位与上其他四种连接方法,然后要强转类型。

信号与槽可以一对一,一对多,多对一。信号的参数要比槽多,反之不可以。信号也可以连信号,发送方的参数要比接收方的多,触发接收方的信号。连接也可以删除,用disconnect()函数,有四个参数,与连接一样。删除一个则相同的连接都失效。

元对象系统:主要是提供信号与槽机制,是C++的一个扩展。组成有QObject类,私有段的Q_Object宏和元对象编译器(moc)。主要功能是把信号与槽翻译成C++编译器看得懂的东西。因为C++中没有信号与槽机制。不过可以通过回调函数的方式在C++中实现。主要是把槽函数的地址指针作为信号函数的参数传进去,通过指针来调用相应的函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值