#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");
}
Любые предложения будут полезны. Спасибо!
Я бы предложил использовать член класса, так как это асинхронная операция. У вас есть объект в стеке, который будет размотан, когда закончится функция, и в этом отношении жизненный цикл объекта.
У вас есть три варианта, чтобы справиться с этим:
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.
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 в этом методе.
Когда ваш Test
конструктор класса выходит из области видимости, ваш ftp
объект уничтожается. QFtp::connectToHost
Функция не блокирует и возвращает сразу. То же самое касается QFtp::login
,
Для решения этой проблемы вы можете выделить свой QFtp
использование объекта new
:
QFtp *ftp = new QFtp(this);