C++ 不调用Qt信号插槽
我遇到了信号和插槽的问题,当我从主函数调用test()函数时,信号和插槽不工作(它们不调用),但当我在主函数中直接从test()调用代码时,信号和插槽正在调用!我做错了什么? 第二个问题,有没有办法回覆?我需要在第页找到一些东西 main.cppC++ 不调用Qt信号插槽,c++,qt,qt5,signals-slots,qnetworkaccessmanager,C++,Qt,Qt5,Signals Slots,Qnetworkaccessmanager,我遇到了信号和插槽的问题,当我从主函数调用test()函数时,信号和插槽不工作(它们不调用),但当我在主函数中直接从test()调用代码时,信号和插槽正在调用!我做错了什么? 第二个问题,有没有办法回覆?我需要在第页找到一些东西 main.cpp void test() { httpManager manager; manager.sendRequest("http://google.com/"); } int main(int argc, char *argv[]) {
void test()
{
httpManager manager;
manager.sendRequest("http://google.com/");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MfzBot w;
w.show();
test();
return a.exec();
}
working main.cpp:
void test()
{
httpManager manager;
manager.sendRequest("http://google.com/");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MfzBot w;
w.show();
httpManager manager;
manager.sendRequest("http://google.com/");
return a.exec();
}
httpmanager.cpp:
httpManager::httpManager()
{
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
}
QNetworkCookieJar cookies;
void httpManager::sendRequest(const char* url)
{
QNetworkProxyFactory::setUseSystemConfiguration (true);
QByteArray outArray;
QDataStream stream(&outArray, QIODevice::WriteOnly);
manager->setCookieJar(cookies);
QNetworkRequest request(QUrl(url));
manager->post(request, outArray);
}
void httpManager::replyFinished(QNetworkReply *reply)
{
qDebug() << "ok! ";
qDebug() << reply->readAll();
}
第一个代码的问题是,在调用函数“test()”后在堆栈上创建了类型为“httpManager”的对象“manager”,并在test()返回时分别销毁。因此,当“test()”返回并且信号和插槽不工作时,没有“manager”对象。而在后一个代码中,“管理器”一直存在,直到应用程序终止。第一个代码的问题是,具有“httpManager”类型的对象“管理器”在调用函数“test()”后在堆栈上创建,并在test()返回时分别被销毁。因此,当“test()”返回并且信号和插槽不工作时,没有“manager”对象。而在后一个代码中,“管理器”一直存在,直到应用程序终止。第一个代码的问题是,具有“httpManager”类型的对象“管理器”在调用函数“test()”后在堆栈上创建,并在test()返回时分别被销毁。因此,当“test()”返回并且信号和插槽不工作时,没有“manager”对象。而在后一个代码中,“管理器”一直存在,直到应用程序终止。第一个代码的问题是,具有“httpManager”类型的对象“管理器”在调用函数“test()”后在堆栈上创建,并在test()返回时分别被销毁。因此,当“test()”返回并且信号和插槽不工作时,没有“manager”对象。而在后一个代码中,“管理器”一直存在,直到应用程序终止。您的对象“管理器”在test()函数完成后立即被销毁。要避免这种情况,请尝试动态创建对象:
httpManager *manager;
void test()
{
manager = new httpManager();
manager->sendRequest("http://google.com/");
}
请注意,“httpManager*manager”不属于任何函数
现在,您的“管理器”对象位于内存中的某个位置(称为heap),并且在test()函数退出时不会被销毁。
注意,这个方法不太好,因为“manager”现在是全局变量,这在面向对象编程中不是一个好方法,但第一次它并不重要。您的对象“manager”在test()函数完成后立即被销毁。要避免这种情况,请尝试动态创建对象:
httpManager *manager;
void test()
{
manager = new httpManager();
manager->sendRequest("http://google.com/");
}
请注意,“httpManager*manager”不属于任何函数
现在,您的“管理器”对象位于内存中的某个位置(称为heap),并且在test()函数退出时不会被销毁。
注意,这个方法不太好,因为“manager”现在是全局变量,这在面向对象编程中不是一个好方法,但第一次它并不重要。您的对象“manager”在test()函数完成后立即被销毁。要避免这种情况,请尝试动态创建对象:
httpManager *manager;
void test()
{
manager = new httpManager();
manager->sendRequest("http://google.com/");
}
请注意,“httpManager*manager”不属于任何函数
现在,您的“管理器”对象位于内存中的某个位置(称为heap),并且在test()函数退出时不会被销毁。
注意,这个方法不太好,因为“manager”现在是全局变量,这在面向对象编程中不是一个好方法,但第一次它并不重要。您的对象“manager”在test()函数完成后立即被销毁。要避免这种情况,请尝试动态创建对象:
httpManager *manager;
void test()
{
manager = new httpManager();
manager->sendRequest("http://google.com/");
}
请注意,“httpManager*manager”不属于任何函数
现在,您的“管理器”对象位于内存中的某个位置(称为heap),并且在test()函数退出时不会被销毁。
注意,这种方法不太好,因为“manager”现在是全局变量,这在面向对象编程中不是一个好方法,但第一次它并不重要。你所说的“有任何方法返回响应”是什么意思。因为在您的插槽replyFinished中,reply指针就是响应。另外,您可能希望通过以下步骤:不要忘记处理错误。您所说的“有任何方法返回响应”是什么意思。因为在您的插槽replyFinished中,reply指针就是响应。另外,您可能希望通过以下步骤:不要忘记处理错误。您所说的“有任何方法返回响应”是什么意思。因为在您的插槽replyFinished中,reply指针就是响应。另外,您可能希望通过以下步骤:不要忘记处理错误。您所说的“有任何方法返回响应”是什么意思。因为在您的插槽replyFinished中,reply指针就是响应。另外,您可能希望完成以下操作:不要忘记处理错误。