Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сеть в QT растолкуйте... 
:(
    Опции темы
LionMdS
Дата 26.3.2011, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Есть самый простой код который загружает страницу из инета в файл:

Код

void MainWindow::on_pushButton_clicked()
{
    file.setFileName("temp");
    h.setHost("vk.com");
    h.get("/", &file);
    file.close();
    h.closeConnection();
}


Пытаюсь подетальнее во всём разобратся, 
1) если мне надо вывести текст страници не в файл а в textEdit?
2) как получить header запроса, и вообще какуюто инфу о нём?
3) как задать строку идентификации браузера?

Заранее спасибо за помощь!
PM MAIL   Вверх
bsa
Дата 26.3.2011, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



LionMdS, так как я не работал с сетью в Qt, то не могу определить тип объекта h. Поэтому, могу только посоветовать использовать вместо file объект типа QBuffer
PM   Вверх
LionMdS
Дата 27.3.2011, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Заголовочный фал:

Код

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();
    void done(bool);
    void requestFinished(int, bool);

private:
    Ui::MainWindow *ui;
    QFile file;
    QHttp h;
    QUrl u;
};



Это сообщение отредактировал(а) LionMdS - 27.3.2011, 01:29
PM MAIL   Вверх
borisbn
Дата 27.3.2011, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата из документации по QHttp
Цитата

This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
...
This class provides a direct interface to HTTP that allows you to download and upload data with the HTTP protocol. However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as those classes possess a simpler, yet more powerful API and a more modern protocol implementation.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
LionMdS
Дата 27.3.2011, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



спс щас попробую, я просто по книге учусь, она походу немного устарела..
PM MAIL   Вверх
borisbn
Дата 27.3.2011, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



LionMdS, там с этими QNetworkAccessManager и QNetworkReply не так всё тривиально, но, всё-таки, правильнее будет ими пользоваться, а не obsolete-классами


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
LionMdS
Дата 27.3.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Цитата(LionMdS @ 26.3.2011,  18:52)
1) если мне надо вывести текст страници не в файл а в textEdit?
2) как получить header запроса, и вообще какуюто инфу о нём?
3) как задать строку идентификации браузера?

А как нсчёт основных вопросов?
PM MAIL   Вверх
borisbn
Дата 27.3.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(LionMdS @  27.3.2011,  14:17 Найти цитируемый пост)
1) если мне надо вывести текст страници не в файл а в textEdit?

bsa, ж подсказал - QBuffer

Цитата(LionMdS @  27.3.2011,  14:17 Найти цитируемый пост)
как получить header запроса, и вообще какуюто инфу о нём?

вообще-то header формируешь ты. нет ?

Цитата(LionMdS @  27.3.2011,  14:17 Найти цитируемый пост)
как задать строку идентификации браузера?

там же в заголовке запроса.

QNetworkRequest::setHeader



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
LionMdS
Дата 27.3.2011, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Цитата(borisbn @  27.3.2011,  14:35 Найти цитируемый пост)
вообще-то header формируешь ты. нет ?


да, я имею ввиду хедер ответа...

за остальное спасибо!
PM MAIL   Вверх
LionMdS
Дата 27.3.2011, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Код

void MainWindow::on_pushButton_clicked()
{
    QNetworkAccessManager *man = new QNetworkAccessManager(this);
    connect(man, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
    QNetworkRequest requset;
    request.setUrl(QUrl("http://vk.com"));
    request.setRawHeader("User-agent", "MyBrowser 1.0");
    man->get(request);
}

void MainWindow::replyFinished(QNetworkReply *reply)
{
    ui->textEdit->setText("DONE!");
}


Что я не правильно делаю, как извлеч инфу из reply?
PM MAIL   Вверх
bsa
Дата 27.3.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



PM   Вверх
LionMdS
Дата 27.3.2011, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Код

void MainWindow::on_pushButton_clicked()
{
    QNetworkAccessManager *man = new QNetworkAccessManager(this);
    QNetworkRequest request;
    request.setRawHeader("User-Agent", "MyBrowser v1.0");
    request.setUrl(QUrl("http://www.google.com.ua"));
    reply = man->get(request);
    connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
    connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));
}

void MainWindow::getReplyFinished()
{
    reply->deleteLater();
}

void MainWindow::readyReadReply()
{
    ui->textEdit->setHtml(QString(reply->readAll()));
}



вобщем разобрался почти со всем.

остался последний вопрос: как изьять header из ответа?

Код

 ui->textEdit->setHtml(QString(reply->readAll())); //как вместо содержимого страицы получить header?

PM MAIL   Вверх
bsa
Дата 27.3.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(LionMdS @  27.3.2011,  19:26 Найти цитируемый пост)
остался последний вопрос: как изьять header из ответа?
Читай мой пост выше
PM   Вверх
LionMdS
Дата 27.3.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



я пробовал, не выходит у меня...
можно пример?

Это сообщение отредактировал(а) LionMdS - 27.3.2011, 22:07
PM MAIL   Вверх
bsa
Дата 28.3.2011, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(LionMdS @  27.3.2011,  22:06 Найти цитируемый пост)
я пробовал, не выходит у меня...

Что именно пробовал?
Код
QList<RawHeaderPair> header = reply->rawHeaderPairs();


Это сообщение отредактировал(а) bsa - 28.3.2011, 10:57
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.