Russian Qt Forum
Июнь 16, 2024, 00:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Скачивание картинок  (Прочитано 3605 раз)
digwnews
Гость
« : Июль 31, 2011, 10:49 »

Появилась проблема.
Нужно реализовать скачивание изображений из интернета и последующее сохранениев файл.
Попробовал реализовать через QNetworkaccessManager.
С помощью get метода скачиваю данные, которые лежат по пути к изображению и сохраняю в файл.
Однако сохраняется только яШяа и больше ничего в файле нет.
В чём может быть проблема? Или как вообще наладить скачивание не текстовой информации?

Спасибо.
Записан
digwnews
Гость
« Ответ #1 : Июль 31, 2011, 10:55 »

Или же скачивает что-то такое: GIF89aґSч
То есть не полную картинку.
Есть какие-нибудь другие средства?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #2 : Июль 31, 2011, 11:19 »

у меня всё корректно скачивается через QNetworkAccessManager, тестировал на этой картинке, использовал вот это решение: http://www.prog.org.ru/index.php?topic=18530.msg124691#msg124691 (только имя файлу лучше давать в виде QFileInfo(basePath).fileName() и можно выводить сообщение по окончании скачивания).
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
digwnews
Гость
« Ответ #3 : Июль 31, 2011, 12:09 »

Мм..
А что неверно здесь?
MainWindow.h

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtNetwork/QNetworkReply>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
private slots:
   void  saveimg(QNetworkReply*);
};

#endif // MAINWINDOW_H

main.cpp


Код:
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QFile>
#include <QByteArray>
#include <QIODevice>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QNetworkRequest req;
    QUrl url("http://www.openbsd.org/art/puffy/ppuf1000X907.gif");
    req.setUrl(url);
    QNetworkAccessManager *manager= new QNetworkAccessManager;
    manager->get(req);
    QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(saveimg(QNetworkReply*)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::saveimg(QNetworkReply *rep)
{
QString data = rep->readAll();

QFile file("C:\\images\\img.gif");
file.open(QIODevice::ReadWrite);
QByteArray arr("");
arr.append(data);
file.write(arr);
}

В сохраняемом файле получается такое содержимое:
GIF89aи‹ч
« Последнее редактирование: Июль 31, 2011, 12:12 от digwnews » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #4 : Июль 31, 2011, 12:16 »

Код
C++ (Qt)
QString data = rep->readAll();
думаю проблема тут - readAll() всё-таки возвращает QByteArray, а не QString, а дальше ноль-символа QString не читает (а 12-й байт как раз и есть ноль-символ). лучше записывай данные в файл так:
Код
C++ (Qt)
file.write(rep->readAll());
file.flush();
и после записи не забудь удалить QNetworkReply:
Код
C++ (Qt)
rep->deleteLater();
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
digwnews
Гость
« Ответ #5 : Июль 31, 2011, 12:20 »

Да, точно!

Большое спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.236 секунд. Запросов: 22.