سؤال

وأنا تحميل ملف باستخدام QNetworkAccessManager :: تحصل ولكن على عكس QHttp :: يحصل هناك أي وسيلة المدمج في لكتابة مباشرة ردا على QIODevice مختلفة.

وأسهل طريقة سيكون أن تفعل شيئا من هذا القبيل:

QIODevice* device;

QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));

وبعد ذلك في فتحة newData:

device->write(reply->readAll());

ولكن لست متأكدا إذا كان هذا هو الطريق الصحيح، وربما فاتني شيء.

هل كانت مفيدة؟

المحلول

وهذا يبدو الصحيح. وأود أن استخدام النماذج ذات المستوى الأدنى من read() وwrite()، وليس تلك QByteArray، التي لا تدعم بشكل صحيح معالجة الأخطاء، ولكن بخلاف ذلك، يبدو على ما يرام.

هل تواجه مشاكل معها؟

نصائح أخرى

وأفضل استخدام إشارة الانتهاء من قراءة جميع محتويات في نهاية عملية التحميل. مثال (إزالة حلقة الحدث واستخدام فتحة جديدة لجعلها غير المتزامن):

    QNetworkAccessManager manager;
    QEventLoop loop;
    QNetworkReply *reply = manager.get( request );
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

    loop.exec();

    QFile file( "YOUR FILE" );
    file.open(QIODevice::WriteOnly);
    file.write(reply->readAll());

    delete reply;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top