Подключение к сигналу QNetworkReply::error

Я использую новый синтаксис соединения для Qt5. QNetworkReply имеет сигнал с именем error, а также функция с именем error. Это вызывает проблемы при попытке подключения к сигналу:

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

ошибка C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const QObject *,const char *,Qt::ConnectionType)': невозможно преобразовать параметр 2 из 'overloaded-function' в 'const char * 'Контекст не позволяет устранить неоднозначность перегруженной функции

Как сообщить компилятору (MSVC), что я хочу подключиться к сигналу, а не к функции?


person Bevan Collins    schedule 21.02.2013    source источник
comment
Возможный дубликат Подключение перегруженных сигналов и слотов в Qt 5   -  person Toby Speight    schedule 18.05.2016


Ответы (2)


Вам нужно вручную указать указатель функции для обращения к правильной функции:

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

Это отмечено последствие использования нового синтаксиса для перегруженных функций:

минусы:

Очень сложный синтаксис в случаях перегрузок?

P.S. Вы можете найти аналогичный пример по ссылке выше:

 QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [socket] (QAbstractSocket::SocketError) {
        qDebug()<< "ERROR " << socket->errorString();
        socket->deleteLater();
    });
person Nemanja Boric    schedule 21.02.2013

Начните с Qt 5.15 QNetworkReply::error больше не является сигналом. Вместо этого вы можете подключиться к &QNetworkReply::errorOccurred, к счастью, без приведения типов:

connect(reply, &QNetworkReply::errorOccurred, this,
            [reply](QNetworkReply::NetworkError) {
               qCDebug() << "Error " << reply->errorString(); 
            });
person mr NAE    schedule 02.11.2020