`
美丽的小岛
  • 浏览: 309179 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

QT之DisConnect

    博客分类:
  • QT
 
阅读更多

一些代码:

A类:

//A.h
#pragma once
#include "qobject.h"
class A:public QObject 
{
    Q_OBJECT

public:
    A(void);
    ~A(void);
public slots:
    virtual void aSlots();
    virtual void aSlots0();
};

A.cpp
#include "A.h"
A::A(void)
{
}
A::~A(void)
{
}
void A::aSlots()
{
}
void A::aSlots0()
{
}

 

B类:
B。h
#pragma once
#include "a.h"
class B :
    public A
{
    Q_OBJECT
signals:
    void callBack();

public:
    B(void);
    ~B(void);

public slots:
    void aSlots();
    void aSlots0();
};

B.cpp
#include "B.h"
B::B(void)
{

}

B::~B(void)
{
}

void B::aSlots()
{
    emit callBack();
}

void B::aSlots0()
{
}

 

D类:
D。h
#pragma once
#include "a.h"
class D :
    public A
{
    Q_OBJECT

public:
    D(void);
    ~D(void);

    public slots:
        void aSlots();
        void aSlots0();
};


D.cpp
#include "D.h"
D::D(void)
{
}

D::~D(void)
{
}

void D::aSlots()
{
}

void D::aSlots0()
{
}

 

F类:
F。h
F.cpp#pragma once
#include "qobject.h"
#include "A.h"
class F:public QObject
{
    Q_OBJECT
public:
    F(void);
    ~F(void);
signals:
    void testS();
    void testS0();
    public slots:
        void reCallBack();
private:
       A *a;

};

F.cpp
#include "A.h"
#include "B.h"
#include "D.h"
#include "F.h"

F::F(void)
{
    bool b = false;
    a = new B();
    b = QObject::connect(a, SIGNAL(callBack()), this, SLOT(reCallBack()));
    b = QObject::connect(this, SIGNAL(testS()), a, SLOT(aSlots()));
    b = QObject::connect(this, SIGNAL(testS0()), a, SLOT(aSlots0()));
    emit testS();//执行,把b对象的连接断开,连接到d中
    emit testS0();//不会执行,因b已经断开
    emit testS();//执行d相应的槽
}
F::~F(void)
{
}

void F::reCallBack()
{
    bool b = false;
    //b = QObject::disconnect(a);
    b = this->disconnect(a);
    a = new D();
    b = QObject::connect(this, SIGNAL(testS()), a, SLOT(aSlots()));
}

 各个方法设置断点,直接使用用F来运行,可以看到效果。

参与的内容:

关于信号与槽的研究

DisConnect:

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

1.    Disconnect everything connected to an object's signals:

取消某个对像的所有的信号连接:

disconnect(myObject,0,0,0);

equivalent to the non-static overloaded function

等价于:

myObject->disconnect();

2.    Disconnect everything connected to a specific signal:

取消某个信号与它对应槽的所有连接:

disconnect(myObject, SIGNAL(mySignal()),0,0);

equivalent to the non-static overloaded function

等价于:

myObject->disconnect(SIGNAL(mySignal()));

3.    Disconnect a specific receiver:

断开某个接收对象的连接:

disconnect(myObject,0, myReceiver,0);

equivalent to the non-static overloaded function

等价于:

myObject->disconnect(myReceiver);

 

bool QObject::disconnect(const QObject * sender, PointerToMemberFunction signal, const QObject * receiver,PointerToMemberFunction method) [static]

1.    Disconnect everything connected to an object's signals:

disconnect(myObject,0,0,0);

2.    Disconnect everything connected to a specific signal:

disconnect(myObject,&MyObject::mySignal(),0,0);

3.    Disconnect a specific receiver:

disconnect(myObject,0, myReceiver,0);

4.    Disconnect a connection from one specific signal to a specific slot:

QObject::disconnect(lineEdit,&QLineEdit::textChanged,

label,  &QLabel::setText);

0 may be used as a wildcard, meaning "any signal", "any receiving object", or "any slot in the receiving object", respectively.

The sender may never be 0. (You cannot disconnect signals from more than one object in a single call.)

If signal is 0, it disconnects receiver and method from any signal. If not, only the specified signal is disconnected.

If receiver is 0, it disconnects anything connected to signal. If not, slots in objects other than receiver are not disconnected.

If method is 0, it disconnects anything that is connected to receiver. If not, only slots named method will be disconnected, and all other slots are left alone. The method must be 0 if receiver is left out, so you cannot disconnect a specifically-named slot on all objects.

 

 

分享到:
评论
1 楼 美丽的小岛 2014-09-30  
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与所有信号的关系;
另外是某个对象的所有信号对应槽的关系或是某个对象的槽对应所有信号的关系。

相关推荐

    qt 段错误 解决方案

    在Qt应用程序中,由于Qt库自身的复杂性和跨平台特性,遇到段错误可能会更加棘手。本文将深入探讨如何解决Qt应用中的段错误问题。 首先,理解段错误的根本原因至关重要。当程序试图执行以下操作时,可能会引发段错误...

    QT中文帮助手册助手!

    QT的信号与槽机制是其核心特性之一。通过信号与槽的连接,开发者可以实现不同对象间的通信,当一个对象的某个事件发生时,可以触发另一个对象的相应动作。例如,点击一个按钮(发出信号)可能会触发数据显示(槽函数...

    inside QT(深入阅读QT源代码)

    通过`connect()`和`disconnect()`方法可以建立或解除信号与槽之间的连接。 - **对象树管理**:`QObject`对象可以通过父-子关系组织成一棵树。当一个`QObject`对象作为另一个对象的子对象创建时,它会被自动添加到父...

    Qt creator MODBUS TCP客户端读取数据应用软件(附带详细说明)

    **Qt Creator MODBUS TCP客户端读取数据应用软件详解** MODBUS TCP是一种广泛应用于工业自动化领域的通信协议,它基于TCP/IP网络协议,使得设备能够通过网络交换数据。在本项目中,我们将探讨如何使用Qt Creator...

    Qt获取并显示电池电量和WIFI信号强度

    wlan.Disconnect(); } ``` 在实际项目中,你可能需要将这些功能封装成一个类,例如`BatteryInfo`和`WifiInfo`,以便在不同的地方复用。同时,为了确保代码的可移植性,你可以在类中添加条件编译指令(如`#ifdef Q_...

    snap7库在qt5下的配置程序存档

    如果一切配置正确,你应该能够成功连接到PLC并与之通信。 6. **测试程序**:`test1`可能是一个用于测试Snap7库在Qt5下配置是否成功的简单程序。运行这个测试,验证你是否能从PLC读取数据,或者写入数据并看到预期的...

    QT常用基础知识

    可以调用 disconnect() 来解除信号和槽函数之间的关联,通常情况下很少需要显式调用 disconnect(),因为对象被删除时 Qt 会自动移除与其相关的关联。信号-槽函数或信号-信号这种关联,要求二者具备相同的参数列表;...

    Qt调用Snap7.zip

    client.Disconnect(); ``` 6. **Qt界面集成** 如果你的应用有图形用户界面,可以使用Qt的信号和槽机制,将读取数据的结果更新到界面上。例如,创建一个槽函数,接收读取到的数据,然后显示在文本框或表格视图中...

    qt_4.3中文白皮书 等入门资料

    在QT 4.3中,信号槽的使用是通过连接(`connect`)和断开(`disconnect`)操作实现的。开发者可以使用`QObject::connect`函数连接信号到槽,`QObject::disconnect`来解除连接。此外,QT还支持信号与信号、信号与槽、...

    qt sftp下载,使用Libssh2

    QT SFTP下载功能的实现主要依赖于Libssh2库,这是一个C语言编写的SSH协议实现库,支持SFTP(Secure File Transfer Protocol)。本教程将详细讲解如何在QT环境下利用Libssh2库进行SFTP文件下载。 首先,我们需要了解...

    Qt开发基础总结

    - 使用event()函数和eventFilter()函数处理事件,以及connect()和disconnect()进行信号与槽的连接和断开。 9. **Qt资源系统** - Qt资源系统允许将应用的资源(如图片、音频、配置文件等)打包到可执行文件中,...

    Qt使用snap7与西门子通讯示例

    在本文中,我们将深入探讨如何使用Qt库与西门子PLC进行通信,特别是通过SNAP7库实现这一目标。SNAP7是一个开源的库,它允许与西门子S7系列PLC进行通信,而Qt则是一个跨平台的C++图形用户界面库。这个示例将帮助...

    QT编程中文参考文档

    `connect`和`disconnect`函数用于建立和解除信号与槽的连接。 8. **QT事件处理**: QT中的事件模型基于事件队列,事件处理器如`event`和`eventFilter`方法用于处理各种用户或系统触发的事件。 9. **QT设计模式**: ...

    Qt使用回调函数方(callback)

    在Qt中,我们可以通过信号和槽机制实现回调,这是一种事件驱动编程模型,当一个信号被触发时,与之连接的槽函数将会被调用。这种设计模式不仅灵活,而且符合Qt的编程风格。 1. **信号与槽的概念** - **信号...

    qt+vs2015 使用QModbusClient 实现 modbustcp 通讯 Demo

    client.disconnect(); ``` 这就是使用Qt + VS2015集成QModbusClient库实现Modbus TCP通信的基本步骤。通过这个Demo,你可以理解如何构建一个简单的Modbus客户端,读取远程设备的数据。在实际项目中,你可能需要根据...

    利用python实现qt功能

    - 响应用户事件:除了信号和槽,还可以使用`QObject.connect()`和`QObject.disconnect()`来动态连接和断开信号。 - 动态UI:通过编程方式动态添加、修改和删除界面元素,增强界面的灵活性。 - 多线程:PyQt5支持...

    QT框架信号原理

    信号与槽(Signals and Slots)是Qt库中用于对象间通信的核心机制之一。与传统的回调函数不同,这种机制更加灵活、易于使用且不易出错。当一个信号被发出时,它会被连接到一个或多个槽函数上执行。这一特性使得Qt...

    基于QT的脚本功能实现

    通过QScriptEngine的connect和disconnect函数,可以在JavaScript中连接和断开信号与槽,实现事件驱动的编程。 6. **错误处理**:QScriptEngine提供了一套错误处理机制,包括异常捕获和错误报告,帮助开发者调试脚本...

    TCP_QTTCP_tcp_C++_QT_qttcpsend_

    在C++中使用QT实现TCP通信,首先要创建一个QTcpSocket对象,通过connect()函数与服务器建立连接,然后利用write()函数发送数据,最后使用disconnect()函数断开连接。 在"QTTCP"中,"TTCP"可能是开发者自定义的前缀...

Global site tag (gtag.js) - Google Analytics