2013-02-21 39 views
7

Tôi đang sử dụng cú pháp kết nối mới cho Qt5. QNetworkReply có một tín hiệu gọi là error và cũng có chức năng gọi là error. Điều này gây khó khăn khi cố gắng kết nối với tín hiệu:Kết nối với QNetworkReply :: tín hiệu lỗi

connect(reply, &QNetworkReply::error, this, &MyClass::error); 

lỗi C2664: 'QMetaObject :: Kết nối QObject :: connect (const QObject *, const char *, const QObject *, const char *, Qt :: ConnectionType)': không thể chuyển đổi thông số 2 từ 'quá tải chức năng' thành 'const char *' Bối cảnh không cho phép định hướng chức năng quá tải

làm thế nào để nói với trình biên dịch (MSVC) mà tôi muốn để kết nối với tín hiệu thay vì chức năng?

+0

có thể trùng lặp của [Kết nối tín hiệu quá tải và khe trong Qt 5] (http://stackoverflow.com/questions/16794695/connecting-overloaded-signals-and- slots-in-qt-5) –

Trả lời

13

Bạn cần bằng tay để đúc con trỏ chức năng để giải quyết các chức năng chính xác:

connect(reply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), this, &MyClass::error); 

Đây là noted hậu quả của việc sử dụng cú pháp mới cho các chức năng quá tải:

khuyết điểm:

Cú pháp rất phức tạp trong trường hợp quá tải?

P.S. Bạn có thể tìm ví dụ tương tự vào liên kết ở trên:

QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [socket] (QAbstractSocket::SocketError) { 
     qDebug()<< "ERROR " << socket->errorString(); 
     socket->deleteLater(); 
    }); 
Các vấn đề liên quan