Я разрабатываю программу обновления для моего приложения в Qt, прежде всего, чтобы узнать структуру (я понимаю, что есть несколько готовых решений, которые здесь не актуальны). Это основное приложение GUI, использующее подкласс QMainWindow
для его главного окна и класс MyAppUpdater
для выполнения реальной логики программы.Синхронная загрузка одного файла - это правильный подход в приложении GUI Qt?
Информация об обновлении (версия, журнал изменений, файлы, которые необходимо загрузить) хранится на моем сервере в виде XML-файла. Первое, что должен сделать обновитель после настройки пользовательского интерфейса, - это запрос на этот сервер, получение XML-файла, его анализ и отображение информации пользователю. Вот здесь у меня проблема; исходя из процедурного/C-фона, я бы начал синхронную загрузку, установить тайм-аут, возможно, 3 секунды, а затем посмотреть, что произойдет - если мне удастся правильно загрузить файл, я проанализирую его и продолжу, иначе вы увидите ошибка.
Однако, видя, как неудобно что-то подобное реализовать в Qt, я пришел к выводу, что его сетевые классы разработаны по-другому, имея в виду другой подход.
Я думал об инициировании асинхронной загрузки, скажем, InitVersionInfoDownload
, а затем подключения QNetworkReply's
finished
сигнала в слот под названием VersionInfoDownloadComplete
, или что-то вдоль этих линий. Мне также нужен таймер для реализации проверок тайм-аута - если слот не вызывается после 3 секунд, обновление должно быть прервано. Однако этот подход представляется чрезмерно сложным и в целом неадекватным ситуации; Я не могу продолжить, не извлекая этот файл с сервера, или действительно ничего делать, ожидая его загрузки, поэтому асинхронный подход кажется вообще неприемлемым. Я ошибаюсь об этом, или есть лучший способ?
Вы бы рекомендовали мне реализовать решение, которое я представил в вопросе, я беру его ? Обратите внимание, что я еще не закодировал его, поэтому вполне вероятно, что я просто преувеличивал его сложность. – szczurcio
@szczurcio Да :) Почувствуйте grep мой [so github repo] (https://github.com/KubaO/stackoverflown) для 'QNetworkReply' и т. Д. –
Хорошо, спасибо за ваш обнадеживающий пост :) – szczurcio