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();
}
  • 值得注意的是用这种方式处理时,信号需要以指针形式书写
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值