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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ребят столкнулся с проблемой что у меня не циклится процесс  (Прочитано 3038 раз)
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
Записан
Bepec
Гость
« Ответ #1 : Май 06, 2014, 17:08 »

Извращенец Веселый

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

Как сделать? запихать всё в класс и делать это в классе, а не в main.
Записан
OKTA
Гость
« Ответ #2 : Май 06, 2014, 17:14 »

Или фигурную скобочку рискнуть переместить чуть повыше  Смеющийся
Записан
GamBitiK
Гость
« Ответ #3 : Май 06, 2014, 17:20 »

Извращенец Веселый

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

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

Есть такой грешок
поясни что именно записать в класс....и как потом он будет вызываться
Записан
GamBitiK
Гость
« Ответ #4 : Май 06, 2014, 18:50 »

Я не могу реализовать((( помогите
Записан
Bepec
Гость
« Ответ #5 : Май 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();
}
Записан
GamBitiK
Гость
« Ответ #6 : Май 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();
}


получается ты вызываешь его в конструкторе?
Записан
Bepec
Гость
« Ответ #7 : Май 06, 2014, 19:56 »

Ну да. В принципе спокойно переноси в любую другую функцию, не страшно. Ток её вызови. EventLoop запускает локальный цикл событий для потока, так что exec QApplication не нужен. Но сам объект QApplication создать надо Улыбающийся
« Последнее редактирование: Май 06, 2014, 20:03 от Bepec » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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