Совершенно верно, я уже плохо помню терминологию.
Но там уже есть startRequest, httpFinished, м.б., в него и вставить команду выхода?
Пётр.
Как скачать файл из проекта на Qt
Совершенно верно, я уже плохо помню терминологию.
Но там уже есть startRequest, httpFinished, м.б., в него и вставить команду выхода?
Пётр.
По скольку, как я понял, пишеться самодостаточный класс. То лучше будет добавить сигнал. Котрый будет издаваться по звершению закачки файла. И соеденить этот сигнал со слотом для выхода.
[quote=Peter]Совершенно верно, я уже плохо помню терминологию.
Но там уже есть startRequest, httpFinished, м.б., в него и вставить команду выхода?
Пётр.
По скольку, как я понял, пишеться самодостаточный класс. То лучше будет добавить сигнал. Котрый будет издаваться по звершению закачки файла. И соеденить этот сигнал со слотом для выхода.[/quote]
Согласен, это будет правильнее, но нужно ли это вобще?
Ведь после окончания Download.Initial из него и так произойдёт выход, дальше
можно будет или выйти или что-то делать с файлом.
Пётр.
Ведь после окончания Download.Initial из него и так произойдёт выход, дальше
можно будет или выйти или что-то делать с файлом.
Только на момент выхода из Inital файл еще не скачан
Вообще, не в обиду этому форуму, есть отличный Russian Qt Forum smile
На днях была необходимость написать нечто подобное. Т.е. нужно было дождаться скачивания и только потом грохаться. Сделал следующим образом.
во первых было добавлено в сам класс следующее:
...
private:
void stopTimer(); //остановка таймера
int timerId; // Это id таймера. Таймер используем для реализации timeouta чтоб у нас навечно объект не повис
bool fCanExit; //Это флаг возможности выхода. В конструкторе приравниваем к true
QEventLoop loop; //для реализации цикла обработки событий
protected:
void timerEvent(QTimerEvent *event); //переопределяем процедуру обработки события таймера
После отправки запроса get или post
....
this->timerId = this->startTimer(10000); //Запускаем таймер который будет обереать нас от бесконечного ожидания ответа
if (!this->loop.isRunning()) this->loop.exec(); //если наш цикл обработки еще не запущен то запускаем
//возможно в этом вам нет необходимости. у меня есть возможность (некоторая специфика)
// повторного захода в этот запрос.
...
Обработка события таймера
void VWebApi::timerEvent(QTimerEvent */* event */)
{
this->stopTimer(); //останавливаем таймер. т.к. таймаут истек и нам уже он не нужен
this->loop.exit(); //останавливем процесс обработки сообщений. Как только это произойдет мы выйдем
// из метода отправляющего запрос (у вас Initial) и перейдем к следующей строке кода. Т.е. в вашем случае
// return 0 (main.cpp);
}
Процедура остановки таймера. Возможно это тоже можно вам не использовать. Это моя специфика: если отправляется повторный запрос мне надо перезапускать таймер
void VWebApi::stopTimer()
{
this->killTimer(this->timerId);
this->timerId=0;
}
Обработка сигнала окончания приема
void VWebApi::replyFinished(QNetworkReply* reply, replyType rplType)
{
...
this->stopTimer(); // останавливаем таймер, чтобы у нас не грохнулся объект во время обработки
fCanExit = // тут решаем можно уже выходить или нет
if (this->fCanExit) this->loop.exit(); если можно то останавливаем обработку событий...
...
}
VWebApi - это имя моего класса, соответственно меняйте на свое :)
Т.к. дернул со своего проекта с некоторой спецификой, так что может быть вам что то можно тут и "почистить"