高考考试网
当前位置: 首页 高考资讯

qt信号槽画图(QT的信号槽机制简介)

时间:2023-08-17 作者: 小编 阅读量: 5 栏目名: 高考资讯

使用QT开发时,我们一般要使用到信号槽机制,这个机制由三部分组成:信号、槽、连接函数connect,我们主要说下connect函数,了解清楚此函数,信号槽机制也基本上懂了。这个在多线程环境下比较危险,可能会造成奔溃。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。也就是避免了重复连接。

使用QT开发时,我们一般要使用到信号槽机制,这个机制由三部分组成:信号、槽、连接函数connect,我们主要 说下connect函数,了解清楚此函数,信号槽机制也基本上懂了。

快乐学习

我们一般情况下我们使用connect函数只传递四个参数:

connect(Sender,SIGNAL(signal),Receiver,SLOT(slot));

这四个参数分别是发送者对象、发送者对象发送的信号、接收者对象、接收者对象响应该信号的槽函数,所以我们有可能认为该函数就只有四个参数,但实际上是有第五个参数的,只是通常该函数已经给第五个参数赋值了而已,我们所使用的是默认值。实际上connect函数应该是如下形式:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )

Qt::DirectConnection参数 参数含义

Qt::AutoConnection 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。

Qt::DirectConnection 槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。

Qt::QueuedConnection 槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。

Qt::BlockingQueuedConnection 槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。

Qt::UniqueConnection 这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。

sender和receiver是QObject对象指针,函数里面我们用到了Qt提供的两个宏SIGNAL()和SLOT();这是Qt要求的,要关联信号和槽必须借助于这两个宏,两个宏的定义如下:

#define SLOT(name) "1"#name

#define SIGNAL(name) "2"#name

通过这两个宏,就可以把我们传递进去的槽和信号的名字转化成字符串,并在这两个字符串前面加上附加的字符。Qt5又在此基础上扩展了一种写法不必用到两个宏SIGNAL()和SLOT(),而是直接写&类名::信号或者&类名::槽函数。一个信号可以和多个槽相连;也可以多个信号可以连接一个槽;也有一个信号可以连接到另一个信号;一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽,有时候我们需要手动去断开连接,如下情况:

有时我们程序中某些情况下某个操作需要断开这个信号槽连接,操作结束后有需要重新连接,断开连接时,那我们需要调用函数

bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method )

用法和connect大致相同。

    推荐阅读
  • 新冠疫苗一针剂二针剂的区别(新冠疫苗一针剂二针剂有什么区别)

    新冠疫苗一针剂二针剂的区别生产厂家附条件批准上市的3个新冠病毒灭活疫苗产品分别由国药集团中国生物北京生物制品研究所有限责任公司(北京所)、武汉生物制品研究所有限责任公司(武汉所)和北京科兴中维生物技术有限公司生产。附条件批准上市的腺病毒载体疫苗为康希诺生物股份公司(康希诺)生产的重组新冠病毒疫苗。接种剂次和间隔新冠病毒灭活疫苗接种2剂;2剂之间的接种间隔建议≥3周,第2剂在8周内尽早完成。

  • 如何清洁马桶(马桶怎么清洁)

    如何清洁马桶首先清洗内壁,往内壁上环倒洁厕剂,浸泡几分钟,用刷子刷洗马桶内缘和管道口深;其次清洗马桶圈,可用稀释好的消毒水擦试清洁;最后清洗马桶外部,用卡瓦片沾清洁剂整体擦试,再用清水冲洗晾干就行。建议每次如厕后,直接将厕纸丢进马桶内冲走,只是建议使用薄一些厕纸,不易堵塞。如果非要用废纸篓,建议选择带盖的,避免细菌散播。

  • 如何批量保存新浪微博的图片(带你深入了解一下)

    如何批量保存新浪微博的图片安装一个名为图片批量下载的拓展程序,安装方法是点击浏览器右上方的拓展下拉框,点击“拓展中心”,选择全部分类。如果想要更加快速的筛选出来你要的图片,减少你筛选图片的工作量,保存特定的图片,还可以采取以下方法,点开图片,右上角有“查看原图”,进入查看原图的界面。查看原图界面的图片较少,可以简化你下载图片的工作量,之后同样点击图标,选择”当前标签“,按之前的方法下载即可。

  • My(美元兑换人民币)

    myaudichina如何使用1、开启myaudichina软件的展示页面,就可以查询即时表明车辆剩下耗油量、里程数、下一次维护保养時间信息内容。Myaudi的服务只给予从激话起2年的免费试用时间,服务期满后必须买车人登陆myaudi官方网站开展服务续费。

  • 紫禁城宫殿之美(这是皇家的紫禁城)

    面对天下的篡逆者指责,永乐帝相信唯有用鲜血才能洗净自己篡位者的血污。妇女则被充当官妓,遭到轮番蹂躏。在1420年12月8日永乐帝诏告天下紫禁城“今已告成”的谕旨中,他表示为营建这座由他一家独享的宫殿“天下军民乐于趋事,天人协赞,景贶骈臻”。为修建这座特供皇权独享的宫殿,前后耗费人力达二十万。皇帝的反应是因谎言戳穿而气急败坏,将直言进谏的官员打入监牢。

  • 西游记取完经后的故事(无量寿经酉阳杂俎后西游记便宜十六策)

    三垢消灭就是止恶。该书共四十回,影响虽不如《西游记》,但在针砭时弊、笑骂文采方面颇与《西游记》相比肩。《便宜十六策》是中国古代著名的蜀汉军事著作,由三国时期杰出的政治家和军事家诸葛亮所著的重要兵法。诸葛亮在《便宜十六策》中所提出的一系列治国治军原则,为后代的人们所推崇,可谓是千古治国治军者的经典。

  • 汽车怎么改装空调(有什么方法)

    空调系统压力升高,特别是高压部分,有可能造成空调管路爆裂。造成压缩机负荷加重,压缩机内部压力升高,活塞缸体压缩困难,再严重的话会导致缸体负荷太重,致使空调皮带打滑。检查风扇,看看水箱,冷凝器有无脏堵有的话清洗一下。汽车空调工作原理的散热过程:高温高压的过热制冷剂气体进入冷凝器,由于压力及温度的降低,制冷剂气体冷凝成液体,并排出大量的热量。

  • 爱心卡通简笔画可爱(男女生卡通爱心简笔画)

    爱心卡通可爱简笔画怎么画?可爱的爱心上色简笔画要怎么画爱心卡通简笔画可爱,我来为大家挑选一些画的好的爱心卡通简笔画可爱?跟着小编一起来欣赏简笔画图片吧!

  • 官方通报瓶装液化石油气泄漏事件(老两口回收化妆品铝罐突然爆燃)

    南都讯南都记者从广州市应急管理局了解到,近日,花都区发生了一起废铝罐爆燃事件,造成两人轻度烧伤。无独有偶,近年来发生过多起类似事故。处理化妆品气雾剂罐时,如果液化石油气不能及时回收,由于它比空气重容易在地面积聚,遇点火源即可发生爆燃事故。

  • 鲜枸杞可以降血糖吗(枸杞能够降低血糖吗)

    目前枸杞只能作为辅助降血糖的中药,并不是主要的降糖药物,并不能够直接使血糖降低。因为枸杞具有很强的抗氧化的能力,所以对于胰岛β细胞具有保护作用。胰岛β细胞是胰腺主要分泌胰岛素的细胞,本身对于调节血糖,是功不可没的。然而对一些特殊的患者,比如正在感冒发烧,身体有炎症或者脾胃比较虚寒腹泻的患者是不建议服用枸杞的,防止病情加重。糖尿病需要进行长期的规范的慢病管理,不能够仅仅通过服用枸杞来降低血糖。