1

SocketTestクラスから関数Do_Download()をmain )関数の外で呼び出す方法を知りたいです。最初のcTest.Do_Download()は機能しますが、 test()関数を呼び出すと、 csTest.Do_Download()が機能しません。

したがって、他の関数からではなく、 main()関数内からのみSocketTestにアクセスできるように見えます。

誰かがこれを解決する方法を知っていますか?ありがとう!

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

SocketTest.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 に答える