Qt connect()的第五种重载[=](){}

155 篇文章 26 订阅

Qt connect()的第五种重载[=](){}

进行网络相关编程时,需要使用信号和槽,碰到一个={}作为槽函数的语句。

【用途】实现函数内部的信号接收。

【原语句】

  connect(tcpSocket, &QTcpSocket::readyRead,

          [=](){

              //从通信套接字中取出内容

              QByteArray array = tcpSocket->readAll();

              qDebug()<<array<<endl;

          }

    );

【函数原型】

static(qmetaobject-connection.html) QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)

测试的简单例子

connection.h

#ifndef CONNECTION_H

#define CONNECTION_H

 

#include <QObject>

#include<QDebug>

class Connection:public QObject

{

  Q_OBJECT

public:

  Connection();

  void test_emit_signal();

 

public slots:

  void test_slot();

signals:

  void test_signal();

 

};

 

#endif // CONNECTION_H

 

connection.cpp

#include "connection.h"

 

Connection::Connection()

{

  //connect(this,SIGNAL(test_signal()),this,SLOT(test_slot()));出错

  connect(this,&Connection::test_signal,[=](){

    qDebug()<<"in slot"<<endl;

    //信号需要用指针的形式,而不能用SIGNAL()的形式

  }

  );

  this->test_emit_signal();

}

 

void Connection::test_slot(){

  qDebug()<<"signal received !"<<endl;

}

 

void Connection::test_emit_signal(){

  emit test_signal();

}

 

main.c

#include <QCoreApplication>

#include"connection.h"

int main(int argc, char *argv[])

{

  QCoreApplication a(argc, argv);

 

  Connection *tmp=new Connection();

 

  return a.exec();

}

值得注意的是用这种方式处理时,信号需要以指针形式书写。

Qt框架中,`connect`函数用于建立信号和槽之间的连接,使得当一个信号被触发时,相关的槽函数会被调用。`connect`函数的基本语法如下: ```cpp connect(sender, signal, receiver, slot[, type]); ``` 其中,前四个参数是必须的,而第五个参数是可选的,它用于指定连接类型(ConnectionType)。这个参数允许你定义信号和槽连接的类型,包括是否应该使用自动连接、线程连接等。该参数主要有以下几种选择: 1. `Qt::AutoConnection`:这是默认值。如果信号发出者和接收者位于同一个线程,那么使用`Qt::DirectConnection`;如果它们位于不同的线程,则使用`Qt::QueuedConnection`。 2. `Qt::DirectConnection`:当信号发出时,槽函数会直接在发出信号的对象的线程中被调用。 3. `Qt::QueuedConnection`:当信号发出时,槽函数会在接收对象的线程的消息队列中排队,然后在该线程的事件循环中被调用。 4. `Qt::BlockingQueuedConnection`:与`Qt::QueuedConnection`相似,但是接收对象的线程在调用槽函数之前会进入阻塞状态。 5. `Qt::UniqueConnection`:这种类型不是一个独立的连接类型,而是一个标志,可以与其他连接类型一起使用。它表示你想要Qt自动选择一种唯一的连接方式,如果该连接已存在,则不会再次创建。 使用`Qt::UniqueConnection`时,可以这样写: ```cpp connect(sender, signal, receiver, slot, Qt::UniqueConnection); ``` 这会要求Qt检查是否已经存在相同的连接,如果存在,则不创建新的连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值