向 QT C++添加代码示例
Adding code example to QT C++
我想在我的简单项目中添加一些QT示例代码。示例代码如下:https://wiki.qt.io/Download_Data_from_URL
它由filedownloader.cpp和filedownloader.h组成 - 此代码从提供的URL下载图形。
我已将这些文件添加到我的项目中并获得干净的编译。我想我理解代码还行(我主要是 c 编码员,而不是 c++),但我不明白如何将我的项目创建的 QUrl 传递给文件下载器.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 文件定位提供给文件下载.cpp?
您必须向FileDownloader添加一个接受QUrl并开始下载的新方法。
文件下载器.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
文件下载器.cpp:
#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;
}
然后你的on_pushButton_clicked
将如下所示:
void MainWindow::on_pushButton_clicked()
{
// pass to filedownloader to process
QUrl fileloc("http://www.test.com/test.jpg");
m_filedownloader.download(fileloc);
}
相关文章:
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 尝试将另一个子句添加到代码中时出错
- Printf 命令不打印时添加了查找常见除数的新代码
- 如何将默认代码添加到我在 vim 中打开的每个 cpp 文件?
- 将自定义代码添加到Swig包装器中
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- 从代码添加时无法单击Qt按钮
- 将代码添加到 c++ winAPI 脚本时出错
- 在WNDClasSex中断代码中将代码添加到WNDPROC回调中
- 如何将Objective C代码添加到FireBreath项目中
- 如何将原生安卓代码添加到 LibGDX
- 将C++代码添加到 iOS 项目
- 将代码添加到 SWIG 中自动生成的类
- 通过代码添加具有可编辑属性的小部件
- 我将如何向该代码添加构造函数
- 在Visual Studio中将自定义代码添加到Qt UIC生成的文件中
- 如何将c++代码添加到Unity项目中
- 如何正确地将OpenGL代码添加到外部函数
- 代码添加了 和1,我不知道为什么