QT在错误的班级中寻找空位
QT looking for slot in wrong class
我有一个单独的类,用于使用QNetwork发出GET请求,如下所示。
请求标头:
#ifndef REQUEST_H
#define REQUEST_H
#include <QUrl>
#include <QObject>
class Request : public QObject
{
Q_OBJECT
public:
void make_request(QUrl url, const char* slot);
};
#endif // REQUEST_H
请求来源:
#include "request.h"
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
void Request::make_request(const QUrl url, const char* slot)
{
QNetworkAccessManager* manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)), this, slot);
QNetworkReply* reply = manager->get(QNetworkRequest(url));
}
我在MainWindow类中运行了以下函数。
request.make_request(QUrl("{ApiUrl}"), SLOT(parse_trending(QNetworkReply*)));
但是,它会产生错误QObject::connect: No such slot Request::parse_trending(QNetworkReply*) in {MainWindow}
我在头文件中添加了Q_OBJECT宏,但我仍然不知道是什么导致了这个错误。
我仍然会提供我的MainWindow标题,也许错误就在那里。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QNetworkReply>
#include <QObject>
#include "util/request.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Request request;
public slots:
void parse_trending(QNetworkReply *reply);
};
#endif // MAINWINDOW_H
在以下代码中:
connect(manager, SIGNAL(finished(QNetworkReply*)), this, slot);
您指出插槽属于此,即它属于Request,但插槽属于MainWindow,因此解决方案是将接收器作为参数传递:
请求.h
...
void make_request(const QUrl & url, QObject *receiver, const char *slot);
...
请求.cpp
void Request::make_request(const QUrl url, QObject *receiver, const char* slot)
{
QNetworkAccessManager* manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)), receiver, slot);
manager->get(QNetworkRequest(url));
}
和
request.make_request(QUrl("{ApiUrl}"), this, SLOT(parse_trending(QNetworkReply*)));
使用std::function
(#include <functional>
(的另一个选项:
void Request::make_request(const QUrl & url, std::function<void (QNetworkReply *)> slot)
{
QNetworkAccessManager* manager = new QNetworkAccessManager();
connect(manager, &QNetworkAccessManager::finished, slot);
manager->get(QNetworkRequest(url));
}
request.make_request(QUrl("{ApiUrl}"), std::bind(&MainWindow::parse_trending, this, std::placeholders::_1));
相关文章:
- QT在错误的班级中寻找空位
- 正在寻找C++不可变的hashset/hashmap
- 寻找地理和伤害意味着超载
- 寻找一种更好的方法来表示无符号字符数组
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 寻找闰年的逻辑是如何运作的?
- C++:寻找"returning address of local variable..."的更正
- 在C++中寻找排列和组合
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 寻找解决这个动态编程问题的提示
- 寻找最小楼梯成本的动态规划问题的错误答案
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- 寻找C++中数组和cout交互的解决方案
- C++原理和练习练习-从输入值n中寻找素数
- 寻找更好的方法来编写这个程序 C++
- 如何使用OpenCV作为运动检测器(而不是寻找视频输出)
- 寻找C++吃得最少的人