Qt connect()的第五種過載[=](){}
阿新 • • 發佈:2018-12-17
進行網路相關程式設計時,需要使用訊號和槽,碰到一個={}作為槽函式的語句,感到非常有意思。
- 用途:實現函式內部的訊號接收
- 原語句
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();
}
- 值得注意的是用這種方式處理時,訊號需要以指標形式書寫