我正在尝试使用带有Qt的c ++编写一段代码连接到FTP服务器,我看到一些奇怪的结果。代码如下
void eos::WeatherRadar::connectToServer()
{
m_bomServer = new QFtp;
connect( m_bomServer, SIGNAL( commandStarted( int ) ), this, SLOT( serverConnectStarted() ) );
connect( m_bomServer, SIGNAL( commandFinished( int, bool ) ), this, SLOT( serverConnectFinished() ) );
m_bomServer->connectToHost("ftp.bom.gov.au");
m_bomServer->connectToHost("ftp.bom.gov.au");
if ( m_bomServer->hasPendingCommands() )
std::cout << "I have commands to execute..." << std::endl;
else
std::cout << "I have no commands even though you just gave me one... WTF!!!" << std::endl;
}
现在让这个奇迹开始......注意我已经重复了connectToHost
行。出于某种原因,如果我只是在说“我没有命令,即使你刚给我一个...... WTF !!!”时才打电话。只有当我拨打两次电话时,hasPendingCommands()
才会返回true
。此外,无论我进行一次或两次此调用,都不会发出commandStarted(int)
信号。
有人知道为什么会发生这种情况或如何解决这个问题?在此先感谢你们: - )。
答案 0 :(得分:0)
QFtp :: hasPendingCommands的doc表示
正在执行的命令不被视为已安排 命令。
因此,在调用connectToHost()
之后立即将其设为假是正常的。
对于连接到commandStarted()
的插槽的问题从未被调用过,很难从显示的代码中说出来,但一个典型的原因是你的代码没有返回到Qt的主事件循环。 QFtp是异步的,因此如果Qt事件循环没有运行,则不会发生任何事情。