что тут пояснять? вы думаете отступы просто так ставятся? нет. для облегчения чтения. показывая такой код, автор высказывает свое неуважение к читателю. вот и всё...
что тут пояснять? вы думаете отступы просто так ставятся? нет. для облегчения чтения. показывая такой код, автор высказывает свое неуважение к читателю. вот и всё...
компилятору плевать на пробелы. в любом известном мне ЯП кроме python'а.
а сишному даже на CR плевать. Вот только это не значит, что нужно так этим пользоваться. Классики пишут, что пробел - лучший комментарий.
компилятору плевать на пробелы. в любом известном мне ЯП кроме python'а.
а сишному даже на CR плевать. Вот только это не значит, что нужно так этим пользоваться. Классики пишут, что пробел - лучший комментарий.
Однако, топикастер не просил оценить его код (Подозреваю он просто коипастил как есть из разных участков кода). Поэтому достаточно, имхо, было просто посоветовать придерживаться правил оформления кода. (только не ребусами)
Ну да ладно, предлагаю приостновить это отклонение от темы.
Может я и туплю. Но вы прибили объект. Указатель заганли в 0.... С первой поптки можно угадать что условие у вас ни когда не выполняется.
А еще чуть выше вы сказали что вам и реплай уже не нужен.... Т.е. если всетаки выполнить условие. То не факт что еще будет жив объект реплай.
Вообще говоря. Мне кажется закинуть все в одну процедуру. Не есть гуд. Я правда не пробовал, но мне кажется. Тут работать будет но не стабильно.
Чем вам не приглянулся мой (а точнее из КуТе Асситента) пример? он должен работать.
Darth Revan,
Комментарии следующие:
Во первых, почитай документацию по Qt (или оригинал в Qt Assistant'е)
Во вторых, почитай конкретно раздел про QNAM.
Насколько я понимаю его устройство, фиг ты сделаешь без классов адекватную качалку. Вообще с Qt4 работать избегая классов - кощунство и глупость.
В приведенном тобой коде главная твоя ошибка состоит в том, что ты не дожидаешься завершения запроса. У QNetworkReply есть функция isFinished(). Сделай хотя бы ожидание окончания запроса. А потом уже обрабатывай ошибки.
Во вторых, подключи хедер QtDebug и пользуйся замечательной штукой qDebug() для вывода отладочной информации.
Рассмотрим кусок кода:
text
if (Reply->error())
{
delete File;
File->remove();
return 1;
}
Тут вообще странная штука. Ты удаляешь объект File(!) а потом ещё вызываешь remove у уже удаленного объекта. Что из этого выйдет?
Также обрати внимание на то, что у большинства объектов в Qt есть функция deleteLater(), которой и стоит пользоваться вместо delete Object;
Кстати именно в этот кусок и стоит воткнуть вывод сообщений об ошибке:
text
if (Reply->error())
{
qDebug()<<"An error has occured: "<<Reply->errorString();
File->remove();
File->deleteLater();
return 1;
}
Вот как-то так для начала.
И перепиши на классах. Код станет чище, его станет проще поддерживать в будущем и в целом логичнее и понятнее.
P.S. Вообще лучший способ не править код из поста, а воспользоваться кодом voral'а. Разобраться сначала в нем, а потом уже свой вариант реализации сделать. Так будет правильнее.
А ещё установите qt4-doc-html, там есть /usr/share/qt4/doc/html/index.html,
в нём Tutorials and Examples, в Examples есть Network, в Network есть Download,
это именно то, что вы пытаетесь сделать. Там в main тоже
text
return app.exec();
это стандартный спсоб запуска Qt-программ.
Конечно, можно заканчивать програму изнутри и сразу после окончания
скачивания файла вызовом
это именно то, что вы пытаетесь сделать. Там в main тоже
text
return app.exec();
это стандартный спсоб запуска Qt-программ.
Это способ запуска цикла обработки сообщений, который будет выполнятся до вызова функций quit() или exit(). Не надо никаких форм, просто в классе который скачивает файл надо создать сигнал downloadFinished() и сделать приблизительно следующее: