Я пытаюсь получить веб-страницу с помощью Qt и распечатать ее на экране. Проблема заключается в том, что она всегда печатает« ». Это не будет сделано для сделанного SLOT. Я не знаю, есть ли что-то неправильное в connect(). Код компилируется без ошибок. Пытается не использовать циклы событий.При попытке получить веб-страницу с помощью Qt QNetworkAccessManager он всегда возвращает «
Вот код:
net.h
#ifndef NET_H
#define NET_H
#include <QObject>
#include <QtNetwork>
#include <QString>
#include <QDebug>
class net : public QObject
{
Q_OBJECT
public:
explicit net(QObject *parent = 0);
void get_site(QString url);
QString data;
signals:
public slots:
void err(QNetworkReply *);
void done(QNetworkReply *);
private:
};
#endif // NET_H
net.cpp:
#include "net.h"
net::net(QObject *parent) :
QObject(parent)
{
}
void net::get_site(QString url) {
QNetworkAccessManager man;
QNetworkRequest request;
request.setUrl (QUrl(url));
connect (&man , SIGNAL(finished(QNetworkReply*)) ,this, SLOT(done(QNetworkReply*)));
connect (&man , SIGNAL(finished(QNetworkReply*)) ,this, SLOT(err(QNetworkReply *)));
man.get (QNetworkRequest(QUrl(url)));
}
void net::done(QNetworkReply * reply) {
data = QString(reply->readAll());
}
void net::err(QNetworkReply * reply) {
data = QString(reply->errorString());
}
И main.cp р:
#include <QCoreApplication>
#include "net.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
net netobj;
netobj.get_site("http://stackoverflow.com");
qDebug() << netobj.data;
return a.exec();
}
«Попытка не использовать событие петли еще.» Ну, есть твоя проблема. Нет никакого способа, которым это когда-либо будет работать, не позволяя циклу событий выполнять свою работу. Поместите контрольные точки в свои слоты и посмотрите, что произойдет. – MrEricSir
Но есть некоторые источники, которые этого не использовали. Я предполагаю, что они используют приложения для выхода из слота. Я не уверен. Я новичок в Qt. – Nve