Russian Qt Forum

Qt => Вопросы новичков => Тема начата: GamBitiK от Май 06, 2014, 15:35



Название: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: GamBitiK от Май 06, 2014, 15:35
Ребят столкнулся с проблемой что у меня не циклится процесс

main.cpp
int main(int argc, char *argv[])
{int i=0;


     QCoreApplication a(argc, argv);
    // QTextCodec *
     test cTest;

     cTest.Bdconnect();
 while(i==0){
   cTest.GetUrl();

    return a.exec();
 }

}


test.cpp
void test::GetUrl()
{
    
connect (manager, SIGNAL(finished(QNetworkReply*)),this,
         SLOT(replyFinished(QNetworkReply*)));
QSqlQuery sort;
sort.exec("SELECT ssilka FROM ssilka"); // iz RSS!!!!!!
while (sort.next()) {
 QString rss =sort.value(0).toString();
   ssilka="http://"+ssilka;
manager->get(QNetworkRequest(QUrl(rss)));

    
}


}











void test::replyFinished(QNetworkReply *Reply)
{QByteArray txt = Reply->readAll();

}
и делаю вывод,но он не работает в цикле,тоесть сначала загрузил 1 страницу->обработал,потом вторую->обработал
их в бд 2


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: Bepec от Май 06, 2014, 17:08
Извращенец :D

exec запускает основной цикл событий приложения. После его завершения программа обычно завершается :D

Как сделать? запихать всё в класс и делать это в классе, а не в main.


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: OKTA от Май 06, 2014, 17:14
Или фигурную скобочку рискнуть переместить чуть повыше  ;D


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: GamBitiK от Май 06, 2014, 17:20
Извращенец :D

exec запускает основной цикл событий приложения. После его завершения программа обычно завершается :D

Как сделать? запихать всё в класс и делать это в классе, а не в main.

Есть такой грешок
поясни что именно записать в класс....и как потом он будет вызываться


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: GamBitiK от Май 06, 2014, 18:50
Я не могу реализовать((( помогите


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: Bepec от Май 06, 2014, 19:23
Main.cpp
Код:
#include <QCoreApplication>
#include "sbnetwork.h"
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "Start";
    SBNetwork w;
    return 0;
}

SBNetwork.h
Код:
#ifndef SBNETWORK_H
#define SBNETWORK_H

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QDebug>
#include <QFile>
#include <QEventLoop>
#include <QTimer>

class SBNetwork : public QObject
{
    Q_OBJECT
public:
    explicit SBNetwork(QObject *parent = 0);


private:
    QNetworkAccessManager manager;

public slots:
    void replyFinished(QNetworkReply*);

};

#endif // SBNETWORK_H

SBNetwork.cpp
Код:
#include "sbnetwork.h"


SBNetwork::SBNetwork(QObject *parent) :
    QObject(parent)
{
    connect(&manager, SIGNAL(finished(QNetworkReply*)),
            this, SLOT(replyFinished(QNetworkReply*)));

    QFile file("d:/1.txt");
    if (!file.open(QIODevice::ReadOnly))
        return;
    while (!file.atEnd())
    {
          QString line(file.readLine());
          manager.get(QNetworkRequest(QUrl(line.simplified())));
          QEventLoop loop;
          QTimer::singleShot(1000, &loop, SLOT(quit()));
          loop.exec();
    }

    qDebug() << "Ok";
}

void SBNetwork::replyFinished(QNetworkReply * n)
{
    qDebug() << n->readAll();
}


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: GamBitiK от Май 06, 2014, 19:35
Main.cpp
Код:
#include <QCoreApplication>
#include "sbnetwork.h"
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "Start";
    SBNetwork w;
    return 0;
}

SBNetwork.h
Код:
#ifndef SBNETWORK_H
#define SBNETWORK_H

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QDebug>
#include <QFile>
#include <QEventLoop>
#include <QTimer>

class SBNetwork : public QObject
{
    Q_OBJECT
public:
    explicit SBNetwork(QObject *parent = 0);


private:
    QNetworkAccessManager manager;

public slots:
    void replyFinished(QNetworkReply*);

};

#endif // SBNETWORK_H

SBNetwork.cpp
Код:
#include "sbnetwork.h"


SBNetwork::SBNetwork(QObject *parent) :
    QObject(parent)
{
    connect(&manager, SIGNAL(finished(QNetworkReply*)),
            this, SLOT(replyFinished(QNetworkReply*)));

    QFile file("d:/1.txt");
    if (!file.open(QIODevice::ReadOnly))
        return;
    while (!file.atEnd())
    {
          QString line(file.readLine());
          manager.get(QNetworkRequest(QUrl(line.simplified())));
          QEventLoop loop;
          QTimer::singleShot(1000, &loop, SLOT(quit()));
          loop.exec();
    }

    qDebug() << "Ok";
}

void SBNetwork::replyFinished(QNetworkReply * n)
{
    qDebug() << n->readAll();
}


получается ты вызываешь его в конструкторе?


Название: Re: Ребят столкнулся с проблемой что у меня не циклится процесс
Отправлено: Bepec от Май 06, 2014, 19:56
Ну да. В принципе спокойно переноси в любую другую функцию, не страшно. Ток её вызови. EventLoop запускает локальный цикл событий для потока, так что exec QApplication не нужен. Но сам объект QApplication создать надо :)