crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Задержка внутри функции, Сделать задержку внутри функции до завершения сигнала
lioncub
  опции профиля:
сообщение 20.11.2009, 13:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


Собственно код (получаю html страницу):
webs.h
#ifndef WEBS_H
#define WEBS_H

#include <QObject>
#include <QHttp>
#include <QUrl>

class Webs : public QObject
{
    Q_OBJECT

public:
        Webs();
        QString getText();

private slots:
        void httpRequestFinished(bool);

private:
        QString text;
        QHttp *http;

};

#endif
webs.cpp
#include "webs.h"

Webs::Webs()
{
    http = new QHttp();
    connect(http, SIGNAL(done(bool)), this, SLOT(httpRequestFinished(bool)));
}

QString Webs::getText()
{
    http->setHost(QUrl("http://crossplatform.ru").host(), QHttp::ConnectionModeHttp);
    QByteArray path = QUrl::toPercentEncoding(QUrl("http://crossplatform.ru").path(), "!$&'()*+,;=:@/");
    http->get(path);
    return text;
}

void Webs::httpRequestFinished(bool error)
{
    if (!error) {
        text = http->readAll();
    }
    else
        qDebug("Error!");
}
main.cpp
#include <QtGui>
#include <QLabel>

#include "webs.h"

int main(int argc, char *argv[])
{
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);

    QApplication app(argc, argv);
    QLabel *win = new QLabel();

    Webs *web = new Webs();
    win->setText(web->getText());
    win->show();
    return app.exec();
}
webs.pro
TEMPLATE = app
INCLUDEPATH += .
QT += network
HEADERS += webs.h
SOURCES += webs.cpp main.cpp

Как в функции класса дождаться выполнения сигнала и вернуть уже загруженную страницу?

Сообщение отредактировал lioncub - 20.11.2009, 15:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 20.11.2009, 13:51
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Почитай тему:
http://www.forum.crossplatform.ru/index.ph...c=3516&st=0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 20.11.2009, 14:44
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


BRE, сорри, но конкретного не нашел... или не понял...
по ожидании while будет грузиться проц..., по QTcpSocket такое сделать смогу (дабы уже есть SMTP клиент), а вот на QHttp, что то не выходит.... если не сложно, то на текущем примерчике....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 20.11.2009, 15:18
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(lioncub @ 20.11.2009, 14:44) *
BRE, сорри, но конкретного не нашел... или не понял...
по ожидании while будет грузиться проц..., по QTcpSocket такое сделать смогу (дабы уже есть SMTP клиент), а вот на QHttp, что то не выходит.... если не сложно, то на текущем примерчике....

Цитирую из той ветки:
QByteArray loader()
{
        QHttp http;
        QEventLoop loop;
        QObject::connect( &http, SIGNAL( done( bool ) ), &loop, SLOT( quit() ) );

        http.setHost( ... );
        http.get( ... );
        loop.exec();
    // выходим из цикла при получении сигнала QHttp::done

    // Проверили ошибки....
        qDebug() << http.state() << http.error() << http.bytesAvailable();
        return http.readAll();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 20.11.2009, 15:28
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(BRE @ 20.11.2009, 15:18) *
Цитирую из той ветки:

просто увидел ответ на тот пост и не стал брать в расчет:
Цитата
BRE, то, что вы предлагаете - очень опасная практика. Начнут прокачиваться сообщения, т.е. вызываться слоты\обработчики, которые в данный момент времени (посреди работы функции) вызываться совершенно не должны.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 20.11.2009, 15:32
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(lioncub @ 20.11.2009, 15:28) *
просто увидел ответ на тот пост и не стал брать в расчет

А дальше обсуждение почитать? ;)

Это не опасней вызова QDialog::exec() и использования указателей. :)
Если все делать с головой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lioncub
  опции профиля:
сообщение 20.11.2009, 15:45
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 10.11.2009
Пользователь №: 1220

Спасибо сказали: 3 раз(а)




Репутация:   0  


а дальше там я и немного не понял... там помоему про одно и тоже несколько постов написано....
спасибо... попробую...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 4:26