1

我想知道如何从SocketTest类调用函数Do_Download()而不是main()函数。第一个cTest.Do_Download()确实有效,但是当我调用test()函数时,csTest.Do_Download()不起作用。

所以看起来我只能从main()函数内部访问 SocketTest,而不能从任何其他函数。

有人知道如何解决这个问题吗?谢谢!

主.cpp:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    SocketTest cTest;
        cTest.Do_Download();

    return a.exec();
}


void test()
{
    qDebug() << "test main functie";

    SocketTest csTest;
        csTest.Do_Download();
}

套接字测试.h:

#ifndef SOCKETTEST_H
#define SOCKETTEST_H

#include <QObject>
#include <QTcpSocket>
#include <QDebug>
#include <QHttp>
#include <QFile>
#include <QString>

class SocketTest : public QObject
{
    Q_OBJECT
public:
    explicit SocketTest(QObject *parent = 0);


   void Do_Download();
signals:

public slots:

    void stateChanged ( int state );
    void responseHeaderReceived ( const QHttpResponseHeader & resp );
    void requestFinished ( int id, bool error );

private:
    QTcpSocket *socket;
    QHttp *http;
    QHttp *http2;

};

#endif // SOCKETTEST_H
4

1 回答 1

3

如果您的DoDownload函数正在异步执行任何操作(可能是在处理 Qt 网络类时),那么SocketTest您正在创建的test()函数在它可以对任何返回值起作用之前就被销毁了。

它起作用是main()因为事件循环开始并且SocketTest实例挂起。

于 2012-04-25T16:03:15.307 回答