crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QHttp проблема с слотами
Fatalius
  опции профиля:
сообщение 9.1.2010, 15:50
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 9.1.2010
Пользователь №: 1359

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




Репутация:   0  


Очень странная непонятная штука происходит, прошу вашей помощи.

В общем, есть класс, который с помощью QHttp загружает картинки с веб-адресов, используя его в одном проекте, сигналы и слоты обрабатываются нормально, в другом тишина, никакой реакции на сигнал, что это может быть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 9.1.2010, 16:13
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Fatalius,
соединил значит криво.
скорее вего о кривом соединении тебе сообщат сообшением в консоли.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fatalius
  опции профиля:
сообщение 9.1.2010, 17:10
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 9.1.2010
Пользователь №: 1359

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




Репутация:   0  


Цитата(kwisp @ 9.1.2010, 16:13) *
Fatalius,
соединил значит криво.
скорее вего о кривом соединении тебе сообщат сообшением в консоли.


нет, компилится нормально, ошибок никаких нет.

Код следующий
#ifndef IMAGELOADER_H
#define IMAGELOADER_H

#include <QObject>
#include <QPixmap>
#include <QBitmap>
#include <QHttp>
#include <QUrl>
#include <QTemporaryFile>
#include <QDebug>

class ImageLoader : public QObject
{

Q_OBJECT

private:

    QHttp * httpLoader;
    QTemporaryFile * tempFile;
    QPixmap pic;
    bool isLoaded;

public:

    explicit ImageLoader(QObject *parent = 0);

    void loadFromUrl(QString url);


signals:

    void loadedSignal(QPixmap pic);

public slots:

    void loadedSlot(bool r);
    void test();

};

#endif // IMAGELOADER_H


#include "imageloader.h"

ImageLoader::ImageLoader(QObject *parent) :
    QObject(parent), isLoaded(false)
{

}

void ImageLoader::loadFromUrl(QString url)
{

    QUrl imgURL(url);

    this->httpLoader = new QHttp();

    this->tempFile = new QTemporaryFile;

    this->httpLoader->setHost(imgURL.host());

    //tempFile->setAutoRemove(true);
    this->tempFile->open();

    this->httpLoader->get(imgURL.path(), tempFile);

    connect(this->httpLoader, SIGNAL(done(bool)), this, SLOT(loadedSlot(bool)));

    qDebug() << "signals setted";

}

void ImageLoader::loadedSlot(bool r)
{
    qDebug() << "emmited " << r;

    if (!this->isLoaded)
    {
        this->pic.load(tempFile->fileName());
        emit loadedSignal(this->pic);
    }

    this->httpLoader->close();

    this->tempFile->close();

    this->isLoaded = true;
}

void ImageLoader::test()
{
    qDebug() << "State: " + this->httpLoader->state();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 9.1.2010, 18:13
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Fatalius,
при кривом соединении если не ошибаюсь, иначе поправьте. moc ошибок и предупреждений не даёт. проверка существует ли слот или сигнал проиходит во время выполнения программы.

добавьте в проект консоль и посомтрите есть предупреждения или нет.

====================добавлено======================
глянул код.
выглядит подозрительно вообще, и не нравится в частности:

this->httpLoader->get(imgURL.path(), tempFile);
connect(this->httpLoader, SIGNAL(done(bool)), this, SLOT(loadedSlot(bool)));

вызываете гет до коннеста QHttp асинхронный но все же дурной тон.
+
непонятно что вы накрутили с этим
QUrl imgURL(url);
и этим
this->httpLoader->get(imgURL.path(), tempFile);

ну и прочее где удаляете QHttp, к примеру?


Сообщение отредактировал kwisp - 9.1.2010, 18:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fatalius
  опции профиля:
сообщение 10.1.2010, 15:57
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 9.1.2010
Пользователь №: 1359

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




Репутация:   0  


Цитата(kwisp @ 9.1.2010, 18:13) *
Fatalius,
при кривом соединении если не ошибаюсь, иначе поправьте. moc ошибок и предупреждений не даёт. проверка существует ли слот или сигнал проиходит во время выполнения программы.

добавьте в проект консоль и посомтрите есть предупреждения или нет.

====================добавлено======================
глянул код.
выглядит подозрительно вообще, и не нравится в частности:

this->httpLoader->get(imgURL.path(), tempFile);
connect(this->httpLoader, SIGNAL(done(bool)), this, SLOT(loadedSlot(bool)));

вызываете гет до коннеста QHttp асинхронный но все же дурной тон.
+
непонятно что вы накрутили с этим
QUrl imgURL(url);
и этим
this->httpLoader->get(imgURL.path(), tempFile);

ну и прочее где удаляете QHttp, к примеру?


Ну как так, QUrl позволяет работать с строками типа http://..., может выделить отдельно хост или путь,
this->httpLoader->get(imgURL.path(), tempFile); грузим картинку в tempFile, вот и все.

Ну, поставил я удаление QHttp, разницы то нет, как не работало, так и не работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.1.2010, 16:23
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


requestStarted( ) вызывается?
попробуй использовать абсолютный uri c http://....
то что стал удалять объект и не заработало - так это так и должно быть:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 26.12.2024, 19:33