Qt的connect函数和disconnect函数

  • connect的使用方式
  • disconnect的使用方式

connect的使用方式

qt的connect函数,信号与槽的机制,是QObject的核心部分之一,使用connect函数,可以方便进行Qt对象与对象之间数据传递,所有继承QObject类的类定义的对象,都可以使用connect函数传递消息(数据),简直是qt的一大神器。
connect的使用方式有4种,下面我们来逐个介绍。
一、QMetaObject::Connection connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const

// 第一种connect使用实例connect(this,SIGNAL(objectNameChanged(const QString &)),SLOT(slotObjectNameChanged(const QString &)),Qt::AutoConnection);

1)函数中的发送信号的指针和接收信号的指针为同一指针,此函数的本质也是调用了方式2的方法。

二、QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

// 第二种connect使用实例
connect(ui->pushButton_Object,SIGNAL(pressed()),this,SLOT(slotSetObjectName()),Qt::AutoConnection);

1)第一种方式是这种方式的特殊形式;
2)connect返回的QMetaObject::Connection,这个数据类型可以看做bool的数据类型,若connect函数定义的连接正确,返回值为true,否则为false;并且,使用disconnect(QMetaObject::Connection&)可以断开此connect函数。
三、QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)

// 第三种connect使用实例
connect(this,&MainWinddow::objectNameChanged,this,&MainWinddow::slotObjectNameChanged,Qt::AutoConnection);

1)这种connect函数的使用方式没有约束信号传送的数据类型,对于重载信号和槽函数的情况,会造成编译器的困惑,所以,在含有重载信号或者槽函数的类中,不建议使用这种方式。

四、QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)

 QByteArray page = ...;QTcpSocket *socket = new QTcpSocket;socket->connectToHost("qt-project.org", 80);QObject::connect(socket, &QTcpSocket::connected, this, [=] () {socket->write("GET " + page + "\r\n");}, Qt::AutoConnection);

1)c++11中的lambda函数定义connect函数。

disconnect的使用方式

disconnect()有3种用法,其原型如下:
bool QObject::disconnect(const QObject * sender, const char * signal, const QObject * receiver, const char * method)
1.断开与myObject对象的信号与其他对象间的连接,使用后myObject发出的信号没有对应的槽函数进行响应

disconnect(myObject, 0, 0, 0);
// or
myObject->disconnect();

2.断开与myObject对象的mySignal()信号与其他对象间的连接,使用后myObject发出mySignal()信号没有对应的槽函数进行响应

disconnect(myObject, SIGNAL(mySignal()), 0, 0);
// or
myObject->disconnect(SIGNAL(mySignal()));

3.断开与myObject对象与myReceiver对象间的连接,使用后myObject发出mySignal()信号myReceiver对应的槽函数进行响应

disconnect(myObject, 0, myReceiver, 0);
// or
myObject->disconnect(myReceiver);

注意:
1、0表示任意的信号或者接收者对象;
2、const QObject * sender不能是0。

Qt的connect函数和disconnect函数相关推荐

  1. QT中connect函数的几种用法详解总结

    前言 信号与槽机制是QT非常核心的东西,通过信号与槽我们可以将不同的部分有机的结合起来,使得各个组件之间的交互简单高效,信号与曹槽像是设计模式中的观察者模式(我自己觉得是这样),只关心信号何时发来,以 ...

  2. Qt信号槽中connect五个重载函数详细说明,连接类型Qt::DirectConnection,Qt::QueuedConnection,附详细代码

    想说在前面的两句话. 信号槽是 Qt 框架引以为豪的机制之一.熟练使用和理解信号槽,能够设计出解耦的非常漂亮的程序,有利于增强我们的程序设计能力. 信号与槽是Qt学习的重点,但不是难点. 本篇介绍Qt ...

  3. Qt学习之信号与槽函数断开:disconnect

    当信号与槽没有必要继续保持关联时,可以使用disconnect函数来断开连接. bool QObject::disconnect ( const QObject * sender, const cha ...

  4. Qt disconnect函数

    1. 介绍disconnect()用法 disconnect()有3种用法,其原型如下: bool QObject::disconnect(const QObject * sender, const ...

  5. 【Qt】Connect/Disconnect

    关注connect/disconnect的返回值 在创建connect时,一定注意位置,确保只创建一次,否则变量没释放,又connect了,emit之后,会多次进入槽函数. 原则上不需要调用disco ...

  6. QT信号与槽——观察者模式——回调函数

    QT信号与槽--观察者模式--回调函数 1.QT信号与槽机制 1.1信号本质 信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时候 Qt 对应的窗口类会发出某个信号.比如 ...

  7. QT一次性连接多个按钮槽函数

    文章目录 前言 一.使用步骤 1.初始化 2.槽函数 总结 前言 场景:如果QT界面上面有许多按钮,如果一个按钮连接一个信号对应一个槽函数,那么函数太多了,代码结构乱 以下是本篇文章正文内容,下面案例 ...

  8. 匿名函数的disconnect方法 QTimer如何disconnect匿名函数

    在度娘参阅了各大博客,都没有找的这个问题的解决方案,要么就是解决办法是错误的.最后还是在stackoverflow中找到的.难道就我一个人遇到过这个问题吗... 问题描述 国内博客普遍认为,像以下这种 ...

  9. 【Qt】QGLWidget窗口中gl函数的理解及运行流程

    https://blog.csdn.net/qq_35263780/article/details/77815957 QGLWidget类的官方文档:http://doc.qt.io/qt-5.6/q ...

最新文章

  1. 网站优化——网站索引量骤降从网站优化找原因
  2. php语法大全下载,PHP下载文件
  3. vue2使用$set()使对象新增属性后触发视图更新
  4. 初学大数据之Python中5个最佳的数据科学库的学习
  5. 程序员开发windows linux,好程序员不用windows作开发环境
  6. golang orm对比
  7. linux系统编程之信号(五)
  8. 2014行业软件最新列表整理展示
  9. python作函数图像_如何使用python的matplotlib模块画余切函数图像
  10. html内编写vbs,HTML_VBS编程教程 (第2篇),第二篇: 我真没想到, - phpStudy
  11. 三菱PLC、西门子PLC、欧姆龙PLC、松下PLC自定义协议RS485接线篇
  12. python爬虫爬取图片并存入本地
  13. vue3+vite3+vant搭建移动端简易模版
  14. C语言程序设计作业——摘苹果
  15. 【Word】关闭段落/表格等首字母大写功能
  16. 使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度 CSGO段位机制
  17. mysql表的增删改select 和 where
  18. cudnn下载解压后的文件应该放到CUDA文件中的位置
  19. 教你用Matlab进行系统仿真 - Matlab仿真详细教程
  20. pxe引导装机没有识别到LAN

热门文章

  1. 洛谷——P3906 Geodetic集合
  2. 【圆梦名企】上海CA、StarRocks、亚信科技、贝壳找房、博乐科技、学科网众多岗位JD解读直播预告
  3. 第三天 入口文件index.php 01
  4. gazebo中机器人搭载16线激光雷达建图导航
  5. 朴素贝叶斯的三个常用模型: 高斯、多项、伯努利的原理和解释
  6. 2012年10月20日
  7. 这几个游戏玩不通关你还算黑客?
  8. 圆的周长面积(YZOJ-1020)
  9. 语音质量检测 梅尔倒谱失真MCD
  10. 计算机基础知识中真值是什么,计算机中什么叫机器数,什么叫真值