快速概述正在发生的事情:我正在尝试使用 Qt 的 GET 请求QNetworkAccessManager
,但我的函数上的回调函数QObject::connect(..)
没有被调用。我的问题是我可以QObject::connect
从一个对象调用,但连接到另一个对象的插槽(假设我有一个指向对象和插槽的指针) - 有关更多详细信息,请参见下文。
我的最终目标是发布数据(因为它是一个登录函数),我的 POST 请求代码最终遇到了同样的问题——没有调用回调函数。所以我希望能够先做一个简单的 GET 请求,一旦我有了它,我想我自己就可以了。
我目前有一个 QMainWindow LoginWindow
,带有一个调用doLogin()
LoginWindow 类中的插槽的按钮。这一切都如您所料。LoginWindow 还有一个public slots
名为loginResponse(QNetworkReply* response)
.
//---LoginWindow.h
...
public slots:
void doLogin();
void loginResponse(QNetworkReply* response)
...
//---LoginWindow.cpp
LoginWindow::LoginWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::LoginWindow)
{
ui->setupUi(this);
ui->username_le->setFocus();
}
void LoginWindow::doLogin()
{
MyProduct::Network network(this);
qDebug() << "Logging in...";
//Here I call network.login from LoginWindow and pass
//references to the Slot I want to use and the LoginWindow itself
network.login(
ui->username_le->text(), //username
ui->password_le->text(), //password
this, //reference to this object (LoginWindow*)
SLOT(loginResponse(QNetworkReply*)) //loginResponse slot
);
}
void LoginWindow::loginResponse(QNetworkReply* response)
{
qDebug() << "Log in complete";
}
接下来我在命名空间下有另一个类MyProduct
,称为Network
. 正如你在上面看到的,Network
有一个叫做登录的函数。这里是:
void MyProduct::Network login(QString username, QString password, QObject *receiver, const char *slot)
{
QNetworkRequest request(QUrl(API_ROOT + LOGIN_PATH)); //"http://localhost/basic/login.php"
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
//nam = QNetworkAccessManager* declared in the constructor
QObject::connect(nam,SIGNAL(finished(QNetworkReply*)), receiver, slot);
qDebug() << "Posting login data...";
nam->get(request);
}
这里的目标是在我的类中创建一个登录功能Network
,可以在任意数量的窗口中使用和连接(因为用户可以从多个地方登录)。但我没有得到任何回应 -LoginWindow::loginResponse
没有运行。
我在控制台中看到“登录...”和“发布登录数据”输出,但没有看到“登录完成”。
谁能指出我正确的方向或告诉我我疯了或者这是一个坏主意?
提前致谢!