Im нового в Qt и им пытаются понять следующее соединение сигнал-слот:Qt слот сигнал подключения - QNetworkAccessManager
m_networkManager = new QNetworkAccessManager(this);
QNetworkReply *reply = m_networkManager->get(request);
connect(reply, SIGNAL(finished()),this, SLOT(onRequestCompleted()));
Почему мы подключаем «закончил» сигнал после получения-запроса ... Что? произошло, если сетевое соединение в строке-2 было выполнено быстрее до того, как было создано соединение с слотом (строка-3)?
Я знаю, что этот код будет работать. но я хочу понять, как это возможно :)
Чтобы добавить, бывают ситуации, когда запрос может быть действительно завершен немедленно (подумайте f.i. при доступе к схемам URL-адреса 'file' или' qrc', нет задействованной сети). В любом случае QNR не будет запускать 'finished()' перед возвратом в цикл событий. Стандартный способ реализовать это в Qt - как общий шаблон, полезный для ваших классов, - это вызов QMetaObject :: invokeMethod (это, «signalName», Qt :: QueuedConnection). – peppe
У меня лично есть случай, когда поток, выполняющий вторую и третью строки кода в исходном сообщении, не является основным потоком (основной поток - это поток, который обрабатывает события). Поскольку они являются отдельными потоками, позволяет ли это обрабатывать события перед вызовом connect()? QNetworkAccessManager был создан в основном потоке, но get() встречается в отдельном потоке. –