0

我是使用 Qt 的高级初学者,我正在尝试编写一个使用 QFtp 的控制台应用程序。该应用程序本身本质上只是程序代码,但由于 QFtp 是异步的,这让我抓狂。我需要测试多个 ftp 下载是否成功,但代码不会阻塞,因此测试总是失败。到目前为止,最好的解决方案是创建一个信号和插槽链,以菊花链形式链接 ftp 代码和程序部分。看来必须有更好的方法。有任何想法吗?

4

2 回答 2

1

您可以使用QEventLoop等待信号。只需将信号连接到QEventLoop::quit(),然后调用QEventLoop::exec()

QFtp ftp;
QEventLoop eventLoop;
connect(&ftp, SIGNAL(commandFinished(int,bool)), &eventLoop, SLOT(quit()));
eventLoop.exec();
于 2013-01-18T14:13:29.937 回答
0

由于它是异步的,您最好通过信号和槽机制跟踪它,但这确实会影响您的程序逻辑。Qt 中 FTP 的唯一其他默认选项是,QNetworkAccessManager但这也是异步的,因此无论您选择哪种方式,都必须使用信号/插槽系统来跟踪何时完成。

可以使用QTcpSocket和编写自己的 FTP 代码,这允许您阻止调用线程,直到它在某些条件下返回,但您必须编写更多代码才能执行您想要的操作。

于 2013-01-18T12:22:29.310 回答