QT信号插槽未调用



我在信号和插槽中遇到问题时,当我从主函数,信号和插槽呼叫test()函数时(它们不工作),但是当我'M直接从MAIM功能中调用代码,信号和插槽正在调用!我在做什么错?第二个问题,有什么方法可以返回响应?我需要在页面上找到一些东西。

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

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

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

第一个代码的问题是,在调用函数" test()"后,在堆栈上创建了具有" httpmanager"类型的对象"管理器",当分别将test()返回。因此,当" test()"返回时,没有"管理器"对象,信号和插槽无法正常工作。在后一个代码中存在直到终止应用程序之前。

您的对象" Manager"在Test()函数完成后立即销毁。为了避免这种情况,请尝试动态创建对象:

httpManager *manager;
void test()
{
    manager = new httpManager();
    manager->sendRequest("http://google.com/");
}

请注意," httpmanager *管理器"不在任何功能之外。

现在,您的"管理器"对象在内存(称为堆)中的某个地方,而当test()函数退出时未破坏。当心,此方法不太好,因为"管理器"现在是全局变量,这在面向对象的编程中不是很好的方法,但是第一次这并不重要。

相关内容

  • 没有找到相关文章

最新更新