ui->sStatusLbl->setText(tr("要传送的文件为: %1").arg(theFileName)); ui->sSendBtn->setEnabled(true); ui->sOpenBtn->setEnabled(false); } }
时间: 2024-04-03 14:35:12 浏览: 61
这段代码是一个 Qt 框架下的服务器端程序中的槽函数。当用户选择了要传输的文件后,会将文件名显示在界面上的状态栏中,同时启用“发送”按钮,禁用“打开”按钮。其中,`ui->sStatusLbl->setText()` 用于在界面上的状态栏中显示文件名,`tr()` 用于进行国际化处理;`ui->sSendBtn->setEnabled(true)` 用于启用“发送”按钮;`ui->sOpenBtn->setEnabled(false)` 用于禁用“打开”按钮。
相关问题
void Server::updClntProgress(qint64 numBytes) { qApp->processEvents(); //用于在传输大文件时使界面不会冻结 bytesWritten += (int)numBytes; if (bytesTobeWrite > 0) { outBlock = locFile->read(qMin(bytesTobeWrite, payloadSize)); bytesTobeWrite -= (int)clntConn->write(outBlock); outBlock.resize(0); }else { locFile->close(); } ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(bytesWritten); float useTime = time.elapsed(); double speed = bytesWritten / useTime; ui->sStatusLbl->setText(tr("已发送 %1MB(%2MB/s) \n 共%3MB 已用时:%4秒\n估计剩余时间:%5秒") .arg(bytesWritten / (1024*1024)) .arg(speed*1000 / (1024*1024), 0, 'f', 2) .arg(totalBytes / (1024 * 1024)) .arg(useTime/1000, 0, 'f', 0) .arg(totalBytes/speed/1000 - useTime/1000, 0, 'f', 0)); if (bytesWritten == totalBytes) { locFile->close(); tSrv->close(); ui->sStatusLbl->setText(tr("传送文件 %1 成功").arg(theFileName)); } } void Server::on_sOpenBtn_clicked() { fileName = QFileDialog::getOpenFileName(this); if (!fileName.isEmpty()) { theFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1); ui->sStatusLbl->setText(tr("要传送的文件为: %1").arg(theFileName)); ui->sSendBtn->setEnabled(true); ui->sOpenBtn->setEnabled(false); } }
这段代码是一个Qt框架下的服务器端程序,用于传输文件。其中 `updClntProgress(qint64 numBytes)` 函数实现了文件传输的进度条显示和统计,并在传输完成时关闭本地文件和服务器端口,同时在界面上显示传输成功的提示。`on_sOpenBtn_clicked()` 函数用于打开要传输的文件,并在界面上显示要传输的文件名,同时启用“发送”按钮,禁用“打开”按钮。
void Server::updClntProgress(qint64 numBytes) { qApp->processEvents(); //用于在传输大文件时使界面不会冻结 bytesWritten += (int)numBytes; if (bytesTobeWrite > 0) { outBlock = locFile->read(qMin(bytesTobeWrite, payloadSize)); bytesTobeWrite -= (int)clntConn->write(outBlock); outBlock.resize(0); }else { locFile->close(); } ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(bytesWritten); float useTime = time.elapsed(); double speed = bytesWritten / useTime; ui->sStatusLbl->setText(tr("已发送 %1MB(%2MB/s) \n 共%3MB 已用时:%4秒\n估计剩余时间:%5秒") .arg(bytesWritten / (1024*1024)) .arg(speed*1000 / (1024*1024), 0, 'f', 2) .arg(totalBytes / (1024 * 1024)) .arg(useTime/1000, 0, 'f', 0) .arg(totalBytes/speed/1000 - useTime/1000, 0, 'f', 0)); if (bytesWritten == totalBytes) { locFile->close(); tSrv->close(); ui->sStatusLbl->setText(tr("传送文件 %1 成功").arg(theFileName)); } }
这段代码是服务器端更新客户端传输进度的槽函数。在传输文件时,每次客户端发送数据,都会触发bytesWritten信号,该槽函数会将已传输的字节数记录下来,并更新进度条和状态栏显示。同时,如果还有未传输的数据,则继续发送,直到所有数据都被发送完成。最后,如果传输完成,则关闭文件和服务器,并显示传输成功的提示信息。
阅读全文