2016-02-20 71 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(); 
}