QFtp hasPendingCommands()返回true,但从不发出commandStarted(int)信号

时间:2012-05-16 01:09:44

标签: c++ qt

我正在尝试使用带有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)信号。

有人知道为什么会发生这种情况或如何解决这个问题?在此先感谢你们: - )。

1 个答案:

答案 0 :(得分:0)

QFtp :: hasPendingCommands的doc表示

  

正在执行的命令不被视为已安排   命令。

因此,在调用connectToHost()之后立即将其设为假是正常的。

对于连接到commandStarted()的插槽的问题从未被调用过,很难从显示的代码中说出来,但一个典型的原因是你的代码没有返回到Qt的主事件循环。 QFtp是异步的,因此如果Qt事件循环没有运行,则不会发生任何事情。