QT 和 C++:不能在 main() 函数之外调用函数

QT and C++: can't call function outside main() function

本文关键字:函数 调用 main C++ 不能 QT      更新时间:2023-10-16

我想知道如何从 SocketTest 类调用函数 Do_Download() outisde 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

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

它在main()中工作,因为事件循环启动并且SocketTest实例挂起。