gpt4 book ai didi

c++ - 未调用 Qt 信号槽

转载 作者:行者123 更新时间:2023-11-28 00:34:39 26 4
gpt4 key购买 nike

我遇到了信号和槽的问题,当我从 main 函数调用 test() 函数时,信号和槽不工作(它们没有调用),但是当我从 test() 调用代码时直接在主函数中调用信号和槽!我做错了什么?第二个问题,有什么办法可以回复response吗?我需要在页面上找到一些东西。

主要.cpp

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();
}

工作 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();
}

http管理器.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();
}

http管理器.h :

class httpManager : public QObject
{
Q_OBJECT

public:
httpManager();

protected slots:
void replyFinished(QNetworkReply *reply);

public:
void sendRequest(const char *url);

private:
QNetworkCookieJar *cookies = new QNetworkCookieJar();
QNetworkAccessManager *manager = new QNetworkAccessManager();
};

最佳答案

第一个代码的问题在于,类型为“httpManager”的对象“manager”在调用函数“test()”后在堆栈上创建,并在 test() 返回时分别被销毁。因此当“test()”返回时没有“manager”对象并且信号和槽将不工作。而在后一种代码中,“manager”一直存在,直到应用程序终止。

关于c++ - 未调用 Qt 信号槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com