Не в состоянии выполнить ftp ConnectToHost в Qt

#include <qftp.h>
#include <qapplication.h>
#include "test.h"#include "ui_test.h"#include <qfile.h>

int main()
{
QApplication a(argc, argv);
Test w;
ftp.connectToHost("192.168.26.129", 21);
w.show();
return a.exec();
}

Я новичок в Qt, ftp.connectToHost("192.168.26.129", 21) хорошо работает из основного, но всякий раз, когда вызывается из класса 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");
}

Любые предложения будут полезны. Спасибо!

2

Решение

Я бы предложил использовать член класса, так как это асинхронная операция. У вас есть объект в стеке, который будет размотан, когда закончится функция, и в этом отношении жизненный цикл объекта.

У вас есть три варианта, чтобы справиться с этим:

Член класса

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");
}

Эта версия полезна, когда вам нужен объект QFtp и в другом методе.

Умный указатель

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");
}

Эта версия хороша, когда вам нужен только объект QFtp в этом методе, а класс Test не является QObject.

QObject родительско-дочерние отношения

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");
}

Это не будет работать, если класс «Test» станет не-QObject, но он достаточно хорош, когда Test наследует это, и вам нужен только объект QFtp в этом методе.

0

Другие решения

Когда ваш Test конструктор класса выходит из области видимости, ваш ftp объект уничтожается. QFtp::connectToHost Функция не блокирует и возвращает сразу. То же самое касается QFtp::login,

Для решения этой проблемы вы можете выделить свой QFtp использование объекта new:

QFtp *ftp = new QFtp(this);
3

По вопросам рекламы [email protected]