Qt的connect函数和disconnect函数
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函数相关推荐
- QT中connect函数的几种用法详解总结
前言 信号与槽机制是QT非常核心的东西,通过信号与槽我们可以将不同的部分有机的结合起来,使得各个组件之间的交互简单高效,信号与曹槽像是设计模式中的观察者模式(我自己觉得是这样),只关心信号何时发来,以 ...
- Qt信号槽中connect五个重载函数详细说明,连接类型Qt::DirectConnection,Qt::QueuedConnection,附详细代码
想说在前面的两句话. 信号槽是 Qt 框架引以为豪的机制之一.熟练使用和理解信号槽,能够设计出解耦的非常漂亮的程序,有利于增强我们的程序设计能力. 信号与槽是Qt学习的重点,但不是难点. 本篇介绍Qt ...
- Qt学习之信号与槽函数断开:disconnect
当信号与槽没有必要继续保持关联时,可以使用disconnect函数来断开连接. bool QObject::disconnect ( const QObject * sender, const cha ...
- Qt disconnect函数
1. 介绍disconnect()用法 disconnect()有3种用法,其原型如下: bool QObject::disconnect(const QObject * sender, const ...
- 【Qt】Connect/Disconnect
关注connect/disconnect的返回值 在创建connect时,一定注意位置,确保只创建一次,否则变量没释放,又connect了,emit之后,会多次进入槽函数. 原则上不需要调用disco ...
- QT信号与槽——观察者模式——回调函数
QT信号与槽--观察者模式--回调函数 1.QT信号与槽机制 1.1信号本质 信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时候 Qt 对应的窗口类会发出某个信号.比如 ...
- QT一次性连接多个按钮槽函数
文章目录 前言 一.使用步骤 1.初始化 2.槽函数 总结 前言 场景:如果QT界面上面有许多按钮,如果一个按钮连接一个信号对应一个槽函数,那么函数太多了,代码结构乱 以下是本篇文章正文内容,下面案例 ...
- 匿名函数的disconnect方法 QTimer如何disconnect匿名函数
在度娘参阅了各大博客,都没有找的这个问题的解决方案,要么就是解决办法是错误的.最后还是在stackoverflow中找到的.难道就我一个人遇到过这个问题吗... 问题描述 国内博客普遍认为,像以下这种 ...
- 【Qt】QGLWidget窗口中gl函数的理解及运行流程
https://blog.csdn.net/qq_35263780/article/details/77815957 QGLWidget类的官方文档:http://doc.qt.io/qt-5.6/q ...
最新文章
- 网站优化——网站索引量骤降从网站优化找原因
- php语法大全下载,PHP下载文件
- vue2使用$set()使对象新增属性后触发视图更新
- 初学大数据之Python中5个最佳的数据科学库的学习
- 程序员开发windows linux,好程序员不用windows作开发环境
- golang orm对比
- linux系统编程之信号(五)
- 2014行业软件最新列表整理展示
- python作函数图像_如何使用python的matplotlib模块画余切函数图像
- html内编写vbs,HTML_VBS编程教程 (第2篇),第二篇: 我真没想到, - phpStudy
- 三菱PLC、西门子PLC、欧姆龙PLC、松下PLC自定义协议RS485接线篇
- python爬虫爬取图片并存入本地
- vue3+vite3+vant搭建移动端简易模版
- C语言程序设计作业——摘苹果
- 【Word】关闭段落/表格等首字母大写功能
- 使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度 CSGO段位机制
- mysql表的增删改select 和 where
- cudnn下载解压后的文件应该放到CUDA文件中的位置
- 教你用Matlab进行系统仿真 - Matlab仿真详细教程
- pxe引导装机没有识别到LAN