1. 程式人生 > >Qt connect()的第五種過載[=](){}

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();
}
  • 值得注意的是用這種方式處理時,訊號需要以指標形式書寫