C++ 将代码示例添加到QT C++;
我想在我的简单项目中添加一些QT示例代码。示例代码如下: 它由filedownloader.cpp和filedownloader.h组成——这段代码从提供的URL下载图形 我已经将这些文件添加到我的项目中,并得到了一个干净的编译。我想我理解代码还可以(我主要是一名c程序员,而不是c++),但我不明白如何将项目创建的QUrl传递给filedownloader.cpp “项目”只是一个简单的main.cpp/mainwindow.cpp/mainwindow.ui,它提供了一个要按下的按钮。按下按钮调用以下例程:C++ 将代码示例添加到QT C++;,c++,qt,C++,Qt,我想在我的简单项目中添加一些QT示例代码。示例代码如下: 它由filedownloader.cpp和filedownloader.h组成——这段代码从提供的URL下载图形 我已经将这些文件添加到我的项目中,并得到了一个干净的编译。我想我理解代码还可以(我主要是一名c程序员,而不是c++),但我不明白如何将项目创建的QUrl传递给filedownloader.cpp “项目”只是一个简单的main.cpp/mainwindow.cpp/mainwindow.ui,它提供了一个要按下的按钮。按下按钮
void MainWindow::on_pushButton_clicked()
{
// pass to filedownloader to process
QUrl fileloc("http://www.test.com/test.jpg");
}
如何将QUrl fileloc提供给filedownload.cpp?您必须向FileDownloader添加一个新方法,该方法接受QUrl并开始下载 filedownloader.h:
#ifndef FILEDOWNLOADER_H
#define FILEDOWNLOADER_H
#include <QObject>
#include <QByteArray>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
class FileDownloader : public QObject
{
Q_OBJECT
public:
explicit FileDownloader(QUrl imageUrl, QObject *parent = 0);
virtual ~FileDownloader();
QByteArray downloadedData() const;
signals:
void downloaded();
public slots:
void download(QUrl url); // <------ Here it is
private slots:
void fileDownloaded(QNetworkReply* pReply);
private:
QNetworkAccessManager m_WebCtrl;
QByteArray m_DownloadedData;
};
#endif // FILEDOWNLOADER_H
该类的思想似乎是每次下载创建一个FileDownloader对象,并将url作为参数传递。我看不出你有任何修改的必要。这只会增加复杂性。例如,如果两次调用download(),则不可能找到download()调用download()所指的是哪个,并且一次下载会替换另一次下载。
#include "filedownloader.h"
FileDownloader::FileDownloader(QObject *parent) :
QObject(parent)
{
connect(
&m_WebCtrl, SIGNAL (finished(QNetworkReply*)),
this, SLOT (fileDownloaded(QNetworkReply*))
);
// <------ Notice, that i've removed downloading code from here
}
FileDownloader::~FileDownloader() { }
void FileDownloader::fileDownloaded(QNetworkReply* pReply) {
m_DownloadedData = pReply->readAll();
//emit a signal
pReply->deleteLater();
emit downloaded();
}
void FileDownloader::download(QUrl url) { // <------ And its definition
QNetworkRequest request(url);
m_WebCtrl.get(request);
}
QByteArray FileDownloader::downloadedData() const {
return m_DownloadedData;
}
void MainWindow::on_pushButton_clicked()
{
// pass to filedownloader to process
QUrl fileloc("http://www.test.com/test.jpg");
m_filedownloader.download(fileloc);
}