繁体   English   中英

Qt C++ QNetworkRequest 未发出任何请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM