c++ - 多次使用 QNetworkAccessManager GET

标签 c++ qt networking

我正在编写一个应用程序,以相等的时间间隔请求网页,以获取其中的任何更改(以检查是否收到新数据)。我是怎么做到的。

 private:

 QNetworkReply *r;
 QNetworkAccessManager *m;
 QNetworkRequest request;
 QTimer *timer;

在构造函数中,

m = new QNetworkAccessManager(this);
timer = new QTimer(this);
connect(r , SIGNAL(readyRead()), this , SLOT(readit()));
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);

读取函数,

void MainWindow::readit(){
QString st;
st=r->readAll();
m->deleteResource(request);
ui->textBrowser->append(st);
}

更新函数,

void MainWindow::update()
{
 request.setUrl(QUrl("http://localhost/test/default.php"));
 r = m->get(request);
}

我的问题是 m->get(request) 仅在第一次调用时获取请求,再次调用时它什么也不做。我做了几次实验,但最终没有成功。我使用按钮单击将第二个请求更改为另一个网页,但它也什么也没做。

所以我需要专家的帮助,如何更新获取请求并多次获得新回复。

我还想知道我做的是否正确,或者是否有比定期检查网站更可靠的方法从服务器获取数据更改数据。

最佳答案

我看到以下问题:

  1. readyRead 每个请求触发任意次数 - 包括零次 (!),但您将其视为恰好触发一次。使用 finished 信号,它会执行您想要的操作:触发一次,不多也不少。

  2. update 插槽不会将任何插槽连接到请求。

关于c++ - 多次使用 QNetworkAccessManager GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683368/

相关文章:

windows - 为什么 g++ 找不到/链接到 qjpeg4.dll?

c++ - 将它们传递给 cpp 后如何与 qml 项目值进行交互?

c - pcap_pkthdr 是做什么用的?

python - 使用 Python 实现 ping

linux - 如何将 Linux 网络命名空间用于每个进程的路由?

c++ - 在 C++ 中定义 UTF-16BE 字符串

c++ - 声明变量时出现编译器错误 - 八进制序列 200 254 342

c++ - 关于C++优化的问题

c++ - 如何着手一个非常基本的计算机视觉算法

c++ - Qt 关闭上一个窗口