2016-02-20 73 views
0

Qt有点新奇,并试图向网站发出HTTP GET请求。 问题是它不发送任何东西。我已经检查过小提琴手。没有运动。没有错误,信号不会被激发。QNetworkAccessManager不会启动

,如果我有可能被使用,所以我禁用了它们,并没有帮助

这里的任何其他网络接口,我还检查是源:

linkslooker::linkslooker(QThread *thread){ 
    this->mainThread = thread; 
    Loop(); 
} 

void linkslooker::Loop(){ 
    // while(true){ 
     qDebug() << "Looking for sites. Accessability:" << qnam.networkAccessible(); // Always 1 

     mainThread->msleep(1000); //To slow down the loop 

     QNetworkRequest req(QUrl("http://www.test.com")); 
     reply = qnam.get(req); //Get request to a QNetworkReply 

     if(reply->error() != QNetworkReply::NoError) 
      qDebug("network error!"); //There are no errors 

     connect(reply, SIGNAL(finished()), 
       SLOT(httpFinished())); //Finish request signal 
     connect(reply, SIGNAL(readyRead()), 
       this, SLOT(httpReadyRead())); //Read to start signal 
     connect(reply, SIGNAL(downloadProgress(qint64,qint64)), 
       this, SLOT(updateDataReadProgress(qint64,qint64))); //Reading Signal 
     connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), 
       this, SLOT(slotError(QNetworkReply::NetworkError))); //Error Signal 
    // } 
} 


void linkslooker::httpFinished(){ 
    qDebug() << QString::fromUtf8(m_data); 
} 

void linkslooker::slotError(QNetworkReply::NetworkError e) { 
    qDebug() << "slotError" << e ; //Not fired up 
} 
void linkslooker::httpReadyRead() 
{ 
    m_data.append(reply->readAll()); 
    qDebug() << "READY TO READ"; 
} 

void linkslooker::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes) 
{ 
    if (httpRequestAborted) 
     qDebug() << "Network request Aborted"; 
     qDebug() << "Have read " << bytesRead << "Out of " << totalBytes; 
} 

这里是头供参考:

#ifndef LINKSLOOKER_H 
#define LINKSLOOKER_H 
#include <QCoreApplication> 
#include <QQueue> 
#include <QtNetwork> 
#include <QList> 
#include <QNetworkAccessManager> 

class linkslooker:public QObject{ 

    Q_OBJECT 
public: 
    linkslooker(QThread *); 
    ~linkslooker(); 

private: 
    void Loop(); 
    QThread *mainThread; 
    QQueue<QString> websites; 
    QList<QString> searched; 
    QNetworkAccessManager qnam; 
    QNetworkReply *reply; 
    bool httpRequestAborted; 
    QByteArray m_data; 
private slots: 
     void httpFinished(); 
     void httpReadyRead(); 
     void updateDataReadProgress(qint64 bytesRead, qint64 totalBytes); 
     void slotError(QNetworkReply::NetworkError); 
}; 

#endif // LINKSLOOKER_H 
+0

你',而(真)'循环阻塞事件循环。这就是为什么Qt信号不能传送的原因。 – hank

+0

我试过在这个帖子实际上删除循环。它一次运行后就停止了。任何其他想法? – misha130

回答

0

发现问题:

虽然调用该C姑娘我没有给它举行的变量,因此后附的所有信号 - 类被摧毁

不得不从:

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    linkslooker(a.thread()); 
    return a.exec(); 
} 
(因为它是超出范围我假设?)

要这样:

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    linkslooker ll(a.thread()); 
    return a.exec(); 
}