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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Программа на разных компьютерах работает по-разному  (Прочитано 8491 раз)
anDROid
Гость
« : Ноябрь 21, 2010, 17:20 »

В QT creator создал программку,скомпилировал релиз,скинул вместе с дллками другу,
У меня на компьютере работает на ура,а у него глючит.Пробовали через ТимВьивер,делал все как у себя,все равно.Антивирусы,файерволы вырубал.Программа с сетью работает,пост/гет запросы выполняет.Не все запросы почему-то на другом компе выполняются Непонимающий Не знаю что и думать
П.С. У него хрюшка сп3,у мя семерка.Попробовал на другом компе с семеркой,тоже самое,не пашет. Злой
Записан
tim474
Гость
« Ответ #1 : Ноябрь 21, 2010, 17:30 »

Цитировать
В QT creator создал программку

Создавай хоть в ворде (естественно, сохранив в виде обычного текста), результат будет тот же, вопрос только в удобстве разработки.

А по теме: телепаты в отпуске, поэтому лучше выложить код программы.
Записан
anDROid
Гость
« Ответ #2 : Ноябрь 21, 2010, 17:38 »

Код:
Download *d1=new Download;
d1->post("http://domain.ru/auth","Password="+password+"&Login="+mail);//Выполняется
d1->load("http://domain.ru/welcome?p=finish");//Выполняется
QString ref=d1->load("http://domain.ru/"+login+"/i/420053");
QRegExp rx2("'([0-9]{10})'");
rx2.indexIn(ref);
QString setup=d1->post("http://domain.ru/do","a=1&b=2&c="+rx2.cap(1));//Не выполняется на другом компьютере
delete d1;
Вся программа:загружаются пара страничек,выдираются с них параметры,отправляются пост запросы.Может с регекспами траблы?
« Последнее редактирование: Ноябрь 21, 2010, 18:20 от anDROid » Записан
merke
Гость
« Ответ #3 : Ноябрь 21, 2010, 18:14 »

rx2.cap(1)

интересно... раставь плюсы как делал выше
Записан
anDROid
Гость
« Ответ #4 : Ноябрь 21, 2010, 18:20 »

Ну это я так для примера)
Исправил.
Записан
merke
Гость
« Ответ #5 : Ноябрь 21, 2010, 18:23 »

тут уж не дело в Qt, однозначно
Записан
anDROid
Гость
« Ответ #6 : Ноябрь 21, 2010, 18:30 »

А в чем?
У меня нормально работает программа,а на других компьютерах,проверил на нескольких,глючит.
Сейчас хотим попробовать на другом компе поставить дистрибутив.
« Последнее редактирование: Ноябрь 21, 2010, 18:33 от anDROid » Записан
merke
Гость
« Ответ #7 : Ноябрь 21, 2010, 18:34 »

зачем нам пример, ты свой проект полностью выложи, мы и скажем в чем проблема!
Записан
anDROid
Гость
« Ответ #8 : Ноябрь 21, 2010, 18:41 »

http://narod.ru/disk/112631001/legenda.rar.html
Вот ссылка на проект.
« Последнее редактирование: Ноябрь 21, 2010, 18:58 от anDROid » Записан
deaks
Гость
« Ответ #9 : Ноябрь 21, 2010, 22:00 »

маленький совет -
выкладывай исходники сразу в текст сообщения. потому что мало кто будет качать какие-то файлы с файлообменников. соответственно и вероятность, того, что тебе ответят, будет еще меньше
Записан
anDROid
Гость
« Ответ #10 : Ноябрь 22, 2010, 13:24 »

После долгих экспериментов,понял вот какую вещь...У меня на компьютере лучше пинг до сервера и больше скорость.И у меня вся страница нормально грузится в буфер,а у друга пинг в 2 раза больше моего,и у него в буфере после загрузки остается только конец страницы...На виртуальной машине попробовал запустить,тоже только обрывок с конца страницы в буфере оказывался,сделал цикл,пока не загрузится до конца,грузить еще раз,стало нормально работать.А у друга цикл входит в бесконечность,никак не может загрузить.
Какие могут быть причины что в буфере остается только конец страницы?Может таймаут загрузки надо увеличить?Если да,то как?

main.cpp
Код:
void Download::getReplyFinished()
{
    reply->deleteLater();
}

void Download::readyReadReply()
{
    buffer = QString::fromUtf8(reply->readAll());
}

QString Download::load(QString url)
{
    QNetworkRequest request;
    request.setUrl(QUrl(url));
    reply=manager.get(request);
    connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
    connect(reply,SIGNAL(readyRead()),this, SLOT(readyReadReply()));
    QEventLoop loop(this);
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    return buffer;
}

download.h
Код:
#ifndef DOWNLOAD_H
#define DOWNLOAD_H
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>

class Download : public QObject
{
    Q_OBJECT

public:
    QString load(QString url);
private:
    QString buffer;
    QNetworkAccessManager manager;
    QNetworkReply *reply;
    QString Url;
public slots:
    void getReplyFinished();
    void readyReadReply();
};
#endif // DOWNLOAD_H
« Последнее редактирование: Ноябрь 22, 2010, 13:33 от anDROid » Записан
Denjs
Гость
« Ответ #11 : Ноябрь 22, 2010, 13:37 »

а вы уверены, что d1->post() - это синхронная функция которая задерживает управление ДО момента окончания операции?
я вот так лично не уверен (простите, код не анализировал пока...)

а то что получается-то?
Код:
QString setup=d1->post("http://domain.ru/do","a=1&b=2&c="+rx2.cap(1));//Не выполняется на другом компьютере
delete d1;
- получается так, что вы даете объекту команду начать отправку, и сразу-же удаляете нафиг объект? а он в это время в самом разгаре задушевной беседы с сервером о смысле жизни и о ваших страниках которые вы пытаетесь получить от сервера... зачем вы так?!)))

а во вторых, почему вы так - "delete d1;" ?!
 эзвините - но юзать delete для QObject объектов (он же у вас надеюсь от QObject наследован) - это вам ещё и сегфолтом черевато.
делайте d1.deleteLater() - и (возможно) будет вас счастье. Этим вы скажете Qt что объект вам больше не нужен и она сама "грохнет" его (аккуратно и тихо) когда это будет возможно.
« Последнее редактирование: Ноябрь 22, 2010, 13:51 от Denjs » Записан
anDROid
Гость
« Ответ #12 : Ноябрь 22, 2010, 13:45 »

Сделал по-вашему,сейчас пробуем...
Вот функция пост.

Код:
QString Download::post(QString url,QString post)
{
    QNetworkRequest request;
    request.setUrl(QUrl(url));
    request.setRawHeader(QByteArray("User-Agent"), QByteArray("User-Agent=Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.12) Gecko/20101026 MRA 5.6 (build 03402) Firefox/3.6.12 GTB7.1"));
    reply=manager.post(request,post.toUtf8());
    connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
    connect(reply,SIGNAL(readyRead()),this, SLOT(readyReadReply()));
    QEventLoop loop(this);
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    return buffer;
}
Я так понял, что луп должен задерживать выполнение, пока страница не прогрузится до конца?

d1.deleteLater() изменил,но все равно также.В буфере только часть страницы.
« Последнее редактирование: Ноябрь 22, 2010, 13:56 от anDROid » Записан
crossly
Гость
« Ответ #13 : Ноябрь 22, 2010, 14:27 »

не стоит мешать синхронную работу с асинхронной...
убрать
Код:
connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
connect(reply,SIGNAL(readyRead()),this, SLOT(readyReadReply()));

и после loop.exec() прочитать все целиком с помощью readAll()
Записан
anDROid
Гость
« Ответ #14 : Ноябрь 22, 2010, 14:38 »

Код:
QString Download::post(QString url,QString post)
{
    QNetworkRequest request;
    request.setUrl(QUrl(url));
    request.setRawHeader(QByteArray("User-Agent"), QByteArray("User-Agent=Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.12) Gecko/20101026 MRA 5.6 (build 03402) Firefox/3.6.12 GTB7.1"));
    reply=manager.post(request,post.toUtf8());
    //connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
    //connect(reply,SIGNAL(readyRead()),this, SLOT(readyReadReply()));
    QEventLoop loop(this);
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    buffer = QString::fromUtf8(reply->readAll());
    return buffer;
}
Вот так?

Походу так)РАБОТАЕТ!!!СПАСИБО вам огромное!!
« Последнее редактирование: Ноябрь 22, 2010, 14:46 от anDROid » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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