我看了一下link,除了信號間諜和調試,我至少試了一切。我以this site爲例。我現在還沒有設置調試器。QT連接QNetworkReply SIGNAL finished()not firing
我的問題是,我想開一個自定義的插槽,什麼都沒有發生。 我試過qmake並重建項目,但結果是一樣的。 我正在使用QTCreator和QT 5.7 msvc2015_64作爲Windows10機器上的工具包。 我沒有得到應該用於測試功能的任何未引用的警告(*回覆未使用)。什麼可能是這個問題的根源?
我完成的信號有問題嗎?
從程序流程我假設它是以下內容:
我創建了一個新指針,指向名爲manager的類QNetworkAccessManager
的實例。 然後我將管理器對象的信號finished
連接到來自對象管理器的定製插槽test(QNetworkReply*)
。 現在每次發射來自對象管理器的信號finished
時,應該執行來自對象管理器的功能test
。
從文檔QNetworReply *QNetworkAccessManager::get(QNetworkRequest(QUrl))
我假設當這個函數被調用時,一個新的QNetworkReply*
對象被返回,並且當這個對象完成處理時,finished
信號被命中。我必須以另一種方式連接我的信號和插槽嗎?
我試圖聲明QNetworkReply reply* = manager->get....
和connect(reply, SIGNAL(finished()),this,SLOT(test()));
但在這裏我的應用程序崩潰。
當我設置wireshark和過濾器:http包含「http://www.theuselessweb.com」沒有彈出。
switchwebpanel.h
#ifndef SWITCHWEBPANEL_H
#define SWITCHWEBPANEL_H
#include <QNetworkAccessManager>
#include <QObject>
#include <QUrl>
#include <QNetworkReply>
#include <QFile>
#include <QDateTime>
#include <QNetworkRequest>
#include <QDebug>
class switch_panel : public QObject
{
Q_OBJECT
public:
switch_panel(QObject *parent = 0);
void doDownload();
signals:
public slots:
void replyFinished(QNetworkReply *reply);
void test(QNetworkReply * reply);
private:
QNetworkAccessManager *manager;
};
#endif // SWITCHWEBPANEL_H
switchwebpanel.cpp
#include <switchwebpanel.h>
switch_panel::switch_panel(QObject *parent):
QObject(parent)
{}
void switch_panel::doDownload(){
qDebug()<<"Downloader gestartet";
manager = new QNetworkAccessManager (this);
qDebug()<<"connect...";
// Here i want to call the test(QNetworkReply*) function
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(test(QNetworkReply*)));
qDebug()<<"get";
manager->get(QNetworkRequest(QUrl("http://www.theuselessweb.com")));
qDebug()<<"manager gegeted";
}
void switch_panel::replyFinished(QNetworkReply *reply){
qDebug()<<"Async starten";
if(reply->error()){
qDebug()<<"error";
qDebug()<<reply->errorString();
}
else {
qDebug()<<reply->header(QNetworkRequest::ContentTypeHeader).toString();
qDebug()<<reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toString();
qDebug()<<reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
qDebug()<<"File";
QFile *file = new QFile("./htmlpanel.txt");
if(file->open(QFile::Append)){
file->write(reply->readAll());
file->flush();
file->close();
}
//delete file;
}
reply->deleteLater();
qDebug()<<"Async fertig";
}
void switch_panel::test(QNetworkReply *reply){
qDebug()<<"test";
}
我得到以下輸出:
Download
Downloader gestartet
connect...
get
manager gegeted
我Main.cpp的呼籲:switch_panel panel; panel.doDownload();
我Main.cpp的呼籲: switch_panel面板; panel.doDownload(); – Eggi