Я использую Qt 5.4 и пытаюсь возобновить прием новых соединений, когда выдается «отключенный» сигнал от моего QTcpSocket
. Так что я писал в .h и .cpp файл, соответственно:Использование QPointer и QObject :: connect с C++ 11
QPointer<QTcpServer> tcpServer; // in .h file
connect(tcpSocket, &QAbstractSocket::disconnected, [=](){
tcpServer->resumeAccepting(); // in .cpp file
});
Как вы можете видеть, я использую QPointer
класс для tcpSocket
. С приведенными выше кодами я не могу создать свою программу и получить ошибку «отсутствие соответствия для вызова ...», в то время как у меня нет проблем в случае определения tcpSocket
без QPointer
.
Как решить эту проблему?
Уважаемый @Marker R, соединяя таким образом требует как TcpSocket и TCPServer быть простым указателем а не Qpointer. поэтому в этом случае он не работает. – Reza
@thung Спасибо за ваш комментарий. Меня устраивает. Сначала напишите как ответ на этот вопрос другим. Вторая официальная помощь qt гласит, что: «Защищенный указатель, QPointer, ведет себя как обычный указатель C++ T *, за исключением того, что при уничтожении объекта ссылки он автоматически устанавливается в 0 (в отличие от обычных указателей C++, которые становятся« оборванными указателями ») в таких случаях). », и у меня есть много соединений с сигналом/слотом, которые не использовали QPointer :: data для них, и они работают нормально (по крайней мере, я думаю: - |). Так и я должен их исправить? –
Reza
@Reza Вы уверены, что не использовали старый синтаксис соединения для рабочих соединений? Например, 'connect (object, SIGNAL (objectSignal()), object, SLOT (objectSlot()));' – thuga