0

以前の質問のフォローアップとして、要求されたページが存在するにもかかわらず、ダウンロードされたデータが空であるという問題に直面しています (少なくとも Web ブラウザーから)。

私は、データが実際にダウンロードされ、デバッグ行fileDownloaded()が呼び出され、からの信号downloaded()がに渡され、ボタンがクリックされるたびに行SLOT(loadText()をコンソールに出力すると推測しています"STRING: "

メインウィンドウ.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <string.h>
#include <iostream>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QByteArray>
#include <QTextCodec>
#include <QDebug>

using namespace std;

namespace Ui {
class MainWindow;
}

class DataFetch : public QObject
{
    Q_OBJECT

public:
    explicit DataFetch(QUrl url, QObject *parent=0);
    virtual ~DataFetch();

    QByteArray downloadedData() const;
signals:
    void downloaded();

public slots:
    void fileDownloaded(QNetworkReply* reply);

private:
    QNetworkAccessManager m_webManager;
    QByteArray m_downloaded;
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    DataFetch * m;

public slots:
    void btnClickHandler();

private slots:
    void loadText();

private:
    Ui::MainWindow *ui;
};





#endif // MAINWINDOW_H

メインウィンドウ.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


DataFetch::DataFetch(QUrl url, QObject *parent):
    QObject(parent)
{
    connect(&m_webManager, SIGNAL(finished(QNetworkReply*)), SLOT(fileDownloaded(QNetworkReply*)));
    QNetworkRequest request(url);
    m_webManager.get(request);
}

DataFetch::~DataFetch() { }

void DataFetch::fileDownloaded(QNetworkReply *reply)
{
    QByteArray m_downloaded = reply->readAll();
    qDebug() << "received reply";
    reply->deleteLater();
    emit downloaded();
}

QByteArray DataFetch::downloadedData() const
{
    return m_downloaded;
}

void MainWindow::loadText()
{
    cout << "STRING: " << m->downloadedData().data() << endl;
    ui->lblText->setText(m->downloadedData());
}

void MainWindow::btnClickHandler()
{
    QUrl textURL = QUrl("http://192.168.2.7/index.html");
    m = new DataFetch(textURL, this);
    connect(m, SIGNAL(downloaded()), SLOT(loadText()));
}

main.cppはデフォルトのテンプレートから変更されていません。

助けてくれてありがとう!

4

0 に答える 0