Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在Qt中执行ftp ConnectToHost_C++_Qt_Qtnetwork_Qftp - Fatal编程技术网

C++ 无法在Qt中执行ftp ConnectToHost

C++ 无法在Qt中执行ftp ConnectToHost,c++,qt,qtnetwork,qftp,C++,Qt,Qtnetwork,Qftp,任何建议都会有帮助。谢谢 当您的测试类构造函数超出范围时,您的ftp对象将被销毁QFtp::connectToHost函数不会阻塞并立即返回。这同样适用于QFtp::login 要解决此问题,您可以使用new分配QFtp对象: Test::Test(QWidget *parent) : QMainWindow(parent), ui(new Ui::Test) { ui->setupUi(this); QFtp ftp; int x = ftp.connec

任何建议都会有帮助。谢谢

当您的
测试
类构造函数超出范围时,您的
ftp
对象将被销毁
QFtp::connectToHost
函数不会阻塞并立即返回。这同样适用于
QFtp::login

要解决此问题,您可以使用
new
分配
QFtp
对象:

Test::Test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Test)
{   
    ui->setupUi(this);
    QFtp ftp;

    int x = ftp.connectToHost("192.168.26.129", 21);
    ftp.login("User1", "passwd");
}

我建议使用类成员,因为它是一个异步操作。堆栈上有一个对象,当函数以及对象的生命周期结束时,该对象将被解开

您有三种选择来处理此问题:

班级成员 当您在其他方法中也需要QFtp对象时,此版本非常有用

智能指针 当您在此方法中只需要QFtp对象,并且测试类不是QObject时,此版本很好

QObject父子关系
如果“Test”类成为非QObject,这将不起作用,但当Test继承该类时,这已经足够好了,并且在此方法中您只需要QFtp对象。

@user3110438:乐意帮助。:)@Laslzo上述代码工作正常,但存在一个问题,即ftp仅在a.exec()之后才能连接到主机;在主代码中执行。现在的问题是,我首先生成一个应用程序窗口,该窗口在应用程序执行后显示(a.exec),从生成的主窗口中,我必须执行FTP操作,但失败了,我应用了你的建议,但仍然无法从我的窗口…我的问题可能很愚蠢…在Qt中幼稚我对此感到抱歉…任何建议都可能是错误的helpful@user3110438请注意,如果要在
Test
类的其他函数中使用
ftp
对象,您应该像Laszlo Papp所说的那样,将其作为
Test
类的成员变量。
Test::Test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Test)
{   
    ui->setupUi(this);
    QFtp ftp;

    int x = ftp.connectToHost("192.168.26.129", 21);
    ftp.login("User1", "passwd");
}
QFtp *ftp = new QFtp(this);
Test::Test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Test)
{   
    ui->setupUi(this);

    int x = m_ftp.connectToHost("192.168.26.129", 21);
    m_ftp.login("User1", "passwd");
}
Test::Test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Test)
{   
    ui->setupUi(this);
    QPointer m_ftp = new QFtp());

    int x = ftp->connectToHost("192.168.26.129", 21);
    ftp->login("User1", "passwd");
}
Test::Test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Test)
{   
    ui->setupUi(this);
    QFtp ftp = new Ftp(this);    

    int x = ftp->connectToHost("192.168.26.129", 21);
    ftp->login("User1", "passwd");
}