环境
Qt 5.4.2
QSsh
功能
使用QSsh 实现文件上传及下载
源码
1.下载,编译QSsh,新建QT工程,引用QSsh库
注:示例程序中QSsh库仅适用于Qt 5.4.2,QT其它版本请重新编译QSsh库
2.mainwindow.h 源码
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
private:
QSsh::SshConnectionParameters argParameters;
QSsh::SshConnection *pSshSocket;
QSharedPointer<QSsh::SftpChannel> sftp;
private slots:
void slotConnected();
void slotSshConnectError(QSsh::SshError);
void uploadFile();
void onChannelError(QString message);
void onDownLoadfinished(QSsh::SftpJobId, QString);
private slots:
void on_pushButton_connect_clicked();
void on_pushButton_Trans_clicked();
void on_pushButton_Load_clicked();
private:
Ui::MainWindow *ui;
};
3.mainwindow.cpp 源码
void MainWindow::slotConnected()
{
ui->statusBar->showMessage("Connected !");
sftp = pSshSocket->createSftpChannel();
if(sftp)
{
connect(sftp.data(), SIGNAL(initialized()),SLOT(uploadFile()));
connect(sftp.data(), SIGNAL(initializationFailed(QString)), SLOT(onChannelError(QString)));
connect(sftp.data(), SIGNAL(finished(QSsh::SftpJobId, QString)), SLOT(onDownLoadfinished(QSsh::SftpJobId, QString)));
sftp.data()->initialize();
}
}
void MainWindow::slotSshConnectError(QSsh::SshError)
{}
void MainWindow::uploadFile()
{
ui->pushButton_Load->setEnabled(true);
ui->pushButton_Trans->setEnabled(true);
ui->pushButton_connect->setEnabled(false);
}
void MainWindow::onChannelError(QString message)
{
ui->pushButton_Load->setEnabled(false);
ui->pushButton_Trans->setEnabled(false);
}
void MainWindow::onDownLoadfinished(QSsh::SftpJobId, QString)
{
ui->statusBar->showMessage("文件传输完成!");
}
void MainWindow::on_pushButton_connect_clicked()
{
argParameters.port = ui->lineEdit_Port->text().toInt();
argParameters.userName = ui->lineEdit_Usr->text();
argParameters.password = ui->lineEdit_Pwd->text();
argParameters.host = ui->lineEdit_Host->text();
argParameters.timeout = 10;
argParameters.authenticationType =
QSsh::SshConnectionParameters::AuthenticationTypePassword; //密码方式连接
if(NULL == pSshSocket)
{
pSshSocket = new QSsh::SshConnection(argParameters);
connect(pSshSocket,SIGNAL(connected()),SLOT(slotConnected()));
connect(pSshSocket,SIGNAL(error(QSsh::SshError)),SLOT(slotSshConnectError(QSsh::SshError)));
}
pSshSocket->connectToHost();
}
void MainWindow::on_pushButton_Trans_clicked()
{
QString localFilePath = ui->lineEdit_LocalFile->text();
QString remoteFilePath = ui->lineEdit_RemoteFile->text();
sftp.data()->uploadFile(localFilePath,remoteFilePath,QSsh::SftpOverwriteExisting);
}
void MainWindow::on_pushButton_Load_clicked()
{
QString localFilePath = ui->lineEdit_LocalFile->text();
QString remoteFilePath = ui->lineEdit_RemoteFile->text();
sftp.data()->downloadFile(remoteFilePath,localFilePath,QSsh::SftpOverwriteExisting);
}
运行
运行结果如下: