如何在发出commandFinished()信号时检查状态

时间:2013-03-05 05:50:55

标签: c++ qt qt4

我正在尝试为多个用户帐户创建一个ftp客户端。添加用户帐户时,我需要检查主机和用户详细信息是否有效。为此,我创建了一个方法。

bool FtpConnect::checkConnectivity(QString remoteIP, QString username, QString password)
{
    QUrl server;
    server.setScheme("ftp");
    server.setHost(remoteIP);
    if (!server.isValid()) {
        QMessageBox::warning(0, "Error", "Invalid Host");
        return false;
    }
    server.setPort(21);
    server.setUserName(username);
    server.setPassword(password);
    QFtp *ftp = new QFtp(this);
    ftp->connectToHost(server.host(), server.port());
    int status = ftp->login(server.userName(), server.password());
    QMessageBox::information(0, "Updated", QString::number(status));
    return (ftp->list() == 4) ? true : false;
}

如果连接正常,我需要代码返回true,而当连接无法完成时,我需要返回false。不,变量status返回4信号QFtp::Connecting。请有人帮助我。

1 个答案:

答案 0 :(得分:2)

QFtp方法不会阻止执行。该命令已被调度,并且它的执行是异步执行的 在您致电status()connectToHost()后,您无法立即查看login(),因为此时状态仍为Unconnected。您应该等待发出信号。
ftp->list()和其他方法返回命令id,因此检查返回值没有意义。您可以做的是记住id并等待commandFinished()信号与此ID,但还有另一种选择 使用QFtp::stateChanged并检查QFtp::LoggedIn