0

複数のユーザーアカウント用の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;
}

接続が完了できなかったときに接続が正常でfalseの場合、trueを返すコードが必要です。いいえ、変数はシグナルであるstatusリターンを返します。誰か助けてください。4QFtp::Connecting

4

1 に答える 1

2

QFtp メソッドは実行をブロックしません。コマンドはスケジュールされ、その実行は非同期で実行されます。またはを呼び出した直後
は確認できません。この時点では状態がまだ であるためです。代わりに、シグナルが発行されるのを待つ必要があります。および他のメソッドはコマンド ID を返すため、戻り値をチェックしても意味がありません。できることは、ID を記憶してこの ID のシグナルを待つことですが、別のオプションがあります。QFtp::stateChangedを 使用してチェックします。status()connectToHost()login()Unconnected
ftp->list()commandFinished()
QFtp::LoggedIn

于 2013-03-05T08:44:49.750 に答える