[英]Qt C++ QNetworkRequest not making any requests
我正在嘗試在此視頻之后使用 QNetworkRequest 從 API 獲取一些數據( https://youtu.be/G06jT3X3H9E )
我有一個在 localhost:3000 上運行的 RoR 服務器,我正試圖從中獲取一些東西。
.h 文件:
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QAuthenticator>
#include <QNetworkProxy>
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr);
signals:
public slots:
void get(QString code);
private slots:
void readyRead();
void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
void encrypted(QNetworkReply *reply);
void finished(QNetworkReply *reply);
void networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible);
void preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator);
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
private:
QNetworkAccessManager manager;
};
#endif // WORKER_H
.cpp 文件:
void Worker::get(QString code)
{
qInfo() << "Getting something from the server...";
QNetworkReply* reply = manager.get(QNetworkRequest(QUrl(QString("http://localhost:3000/api/v1/circle_gift_cards/scan?codes=" + code))));
connect(reply, &QNetworkReply::readyRead, this, &Worker::readyRead);
}
void Worker::readyRead()
{
qInfo() << "ReadReady";
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
if(reply) qInfo() << reply->readAll();
}
結果來自:
Worker worker;
worker.get("abc");
是:“從服務器獲取某些東西......”它應該在請求准備好時打印“ReadReady”,但我不認為請求正在發出,控制台中也沒有任何內容。
[編輯 1] 調用工人的是這個
void MainWindow::on_lineEditScanCard_textChanged(QString code) {
Worker worker(this->site);
worker.get(code);
}
這是一個編輯字段(用戶應該在其中鍵入代碼
[編輯 2]
我刪除了所有應用程序代碼並這樣做:
#include <QApplication>
#include "Forms/mainwindow.h"
#include "Requests/worker.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
Worker worker;
worker.get("abc");
return a.exec();
}
並且它起作用了...為什么在更改編輯文本時調用它不起作用?
還記得scope、生命周期和局部變量的概念嗎? 在您的情況下,worker 是一個將立即銷毀的局部變量,因此不會調用插槽,請使用 Worker * worker = new Worker; 工人->get("abc"); (不再使用時記得刪除memory)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.