如何使用 QuaZip 提取 .zip 文件并在 QProgressDialog 中显示其提取进度?
我尝试了这个question1(以及这个question2)的一个例子,但没有成功。因为我需要解压缩 .zip 文件(而不是 .gz 文件),并且该代码显示进度百分比但不解压缩文件。即便如此,我也不知道如何在 QProgressDialog 中显示 %。
我已经能够使用以下方法提取 .zip 文件:
JlCompress::extractDir("C:/test/test.zip", "C:/test/");
但是,这对我的目标来说还不够,因为我需要在 QProgressDialog 中实时显示提取进度......
这是我的代码:
QString fileName = "C:/test/firefox-29.0.1.gz"; //I need to unzip .zip files
qDebug() << "Opened";
progressUnzip->setWindowTitle(tr("Unzip Manager"));
progressUnzip->setLabelText(tr("Unzipping %1. \nThis can take a long time to complete").arg(fileName));
progressUnzip->setAttribute(Qt::WA_DeleteOnClose);
QFile file(fileName);
file.open(QFile::ReadOnly);
QuaGzipFile gzip;
gzip.open(file.handle(), QuaGzipFile::ReadOnly);
progressUnzip->show();
while(true) {
QByteArray buf = gzip.read(1000);
//process buf
if (buf.isEmpty()) { break; }
QFile temp_file_object;
temp_file_object.open(file.handle(), QFile::ReadOnly);
double progress = 100.0 * temp_file_object.pos() / file.size();
updateUnzipProgress(temp_file_object.pos(), file.size());
qDebug() << qRound(progress) << "%";
}
unzipFinished();
qDebug() << "Finish";
在哪里:
void MainWindow::updateUnzipProgress(qint64 bytesRead, qint64 totalBytes)
{
qDebug() << bytesRead << "/" << totalBytes;
qint64 th = 1;
if (totalBytes >= 100000000)
{
th = 1000;
}
progressUnzip->setMaximum(totalBytes/th);
progressUnzip->setValue(bytesRead/th);
}
// When unzip finished or canceled, this will be called
void MainWindow::unzipFinished()
{
qDebug() << "Unzip finished.";
progressUnzip->hide();
}
在此代码中,QProgressDialog 不显示任何进度条,最后文件未解压缩。
任何想法?
谢谢你的帮助,