我是使用Qt的高级初学者,我正在尝试编写一个使用QFtp的控制台应用程序。应用程序本身基本上只是程序代码,但由于QFtp异步,这让我发疯。我需要测试多个ftp下载是否成功,但代码没有阻塞,因此测试总是失败。到目前为止,最好的解决方案是创建一系列信号和插槽,以菊花链形式连接ftp代码和程序部分。似乎必须有更好的方法。有什么想法吗?
答案 0 :(得分:1)
您可以使用QEventLoop等待信号。只需将信号连接到QEventLoop::quit()
,然后拨打QEventLoop::exec()
。
QFtp ftp;
QEventLoop eventLoop;
connect(&ftp, SIGNAL(commandFinished(int,bool)), &eventLoop, SLOT(quit()));
eventLoop.exec();
答案 1 :(得分:0)
由于它是异步的,你最好通过信号和插槽机制跟踪它,但这确实会破坏你的程序逻辑。 Qt中唯一的FTP默认选项是QNetworkAccessManager
,但这也是异步的,所以无论你选择什么,你都必须使用信号/插槽系统跟踪它何时完成。
你可以使用QTcpSocket
并编写自己的FTP代码,它允许你阻止调用线程,直到它返回某些条件,但你必须编写更多的代码做你想做的事。