Класс
Мы начнем с примера чтения одного файла с помощью функции
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: ftpget url" << endl << "Example:" << endl
07 << " ftpget ftp://ftp.trolltech.com/mirrors" << endl;
08 return 1;
09 }
10 FtpGet getter;
11 if (!getter.getFile(QUrl(args[1])))
12 return 1;
13 QObject::connect(&getter, SIGNAL(done()), &app, SLOT(quit()));
14 return app.exec();
15 }
Мы создаем объект класса
Всю работу делает подкласс
01 class FtpGet : public QObject
02 {
03 Q_OBJECT
04 public:
05 FtpGet(QObject *parent = 0);
06 bool getFile(const QUrl &url);
07 signals:
08 void done();
09 private slots:
10 void ftpDone(bool error);
11 private:
12 QFtp ftp;
13 QFile file;
14 …
15 };
Класс имеет открытую функцию
Класс
01 FtpGet::FtpGet(QObject *parent)
02 : QObject(parent)
03 {
04 connect(&ftp, SIGNAL(done(bool)), this, SLOT(ftpDone(bool)));
05 }
В конструкторе мы подсоединяем сигнал
01 bool FtpGet::getFile(const QUrl &url)
02 {
03 if (!url.isValid()) {
04 cerr << "Error: Invalid URL" << endl;
05 return false;
06 }
07 if (url.scheme() != "ftp") {
08 cerr << "Error: URL must start with 'ftp:'" << 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();