emit listInfo(file_1_2)
…
emit listInfo(file_N_1)
emit listInfo(file_N_2)
…
emit done
get(file_1_1)
emit done
get(file_1_2)
emit done
…
get(file_N_1)
emit done
get(file_N_2)
emit done
…
Еще одно решение могло бы заключаться в применении одного объекта
01 int main(int argc, char *argv[])
02 {
03 QCoreApplication app(argc, argv);
04 QStringList args = app.arguments;
05 if (args.count != 2) {
06 cerr << "Usage: spider url" << endl << "Example:" << endl
07 << " spider ftp://ftp.trolltech.com/freebies/leafnode" << endl;
08 return 1;
09 }
10 Spider spider;
11 if (!spider.getDirectory(QUrl(args[1])))
12 return 1;
13 QObject::connect(&spider, SIGNAL(done), &app, SLOT(quit));
14 return app.exec;
15 }
Функция
В обоих примерах применения протокола FTP данные, полученные функцией
QBuffer *buffer= new QBuffer;
buffer->open(QIODevice::WriteOnly);
ftp.get(urlInfo.name, buffer);
Мы могли бы также не задавать в функции
Написание НТТР—клиента
Класс
Класс
Мы рассмотрим пример консольного приложения с именем
01 HttpGet::HttpGet(QObject *parent)
02 : QObject(parent)
03 {
04 …
05 connect(&http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
06 }
В конструкторе мы подсоединяем сигнал
01 bool HttpGet::getFile(const QUrl &url)
02 {
03 if (!url.isValid) {
04 сегг << "Error: Invalid URL" << endl;
05 return false;
06 }
07 if (url.scheme != "http") {
08 cerr << "Error: URL must start with 'http:'" << endl;
09 return false;
10 }
11 if (url.path.isEmpty) {
12 cerr << "Error: URL has no path" << endl;
13 return false;
14 }
15 QString localFileName = QFileInfo(url.path).fileName;
16 if (localFileName.isEmpty)
17 localFileName = "httpget.out";