QT和C ++:无法在main()函数外调用函数

时间:2012-04-25 15:09:41

标签: c++ qt class function

我想知道如何从主要()函数中的 SocketTest 类调用 Do_Download()函数。 第一个 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

1 个答案:

答案 0 :(得分:3)

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

它适用于main(),因为事件循环开始且SocketTest实例挂起。