在Qt 6中,你可以使用QFileDialog
和QFile
类来实现将ZIP压缩包拷贝到用户选择的地址并命名的功能。以下是示例代码:
#include <QApplication>
#include <QFileDialog>
#include <QMessageBox>
#include <QByteArray>
#include <QFile>
class ZipCopier : public QObject
{
Q_OBJECT
public:
explicit ZipCopier(QObject *parent = nullptr) : QObject(parent)
{
connect(&fileDialog, &QFileDialog::fileSelected, this, &ZipCopier::copyFile);
}
public slots:
void chooseDestination()
{
fileDialog.setAcceptMode(QFileDialog::AcceptSave);
fileDialog.setWindowTitle("Choose Destination");
fileDialog.setNameFilter("ZIP Files (*.zip)");
fileDialog.exec();
}
private slots:
void copyFile(const QString &sourceFilePath)
{
QString destinationFilePath = fileDialog.selectedFiles().at(0);
QFile sourceFile(sourceFilePath);
QFile destinationFile(destinationFilePath);
if (!sourceFile.exists()) {
QMessageBox::critical(nullptr, "Error", "Source file does not exist.");
return;
}
if (!sourceFile.open(QIODevice::ReadOnly)) {
QMessageBox::critical(nullptr, "Error", "Failed to open source file for reading.");
return;
}
if (!destinationFile.open(QIODevice::WriteOnly)) {
QMessageBox::critical(nullptr, "Error", "Failed to open destination file for writing.");
return;
}
qint64 fileSize = sourceFile.size();
while (!sourceFile.atEnd()) {
QByteArray buffer = sourceFile.read(8192); // 缓冲区大小可根据需要进行调整
qint64 bytesWritten = destinationFile.write(buffer);
if (bytesWritten == -1) {
QMessageBox::critical(nullptr, "Error", "Failed to write data to destination file.");
return;
}
// 进度计算示例
qint64 bytesProcessed = sourceFile.pos();
int progress = static_cast<int>((bytesProcessed * 100) / fileSize);
qDebug() << "Progress:" << progress;
}
sourceFile.close();
destinationFile.close();
QMessageBox::information(nullptr, "Success", "ZIP file copied successfully.");
}
private:
QFileDialog fileDialog;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ZipCopier zipCopier;
// 在主窗口弹出对话框中选择存放地址
QTimer::singleShot(0, [&]() { zipCopier.chooseDestination(); });
return app.exec();
}
#include "main.moc"
这段代码将允许用户选择要保存的文件路径和文件名,并使用QFile
类将源ZIP文件复制到目标位置。你可以根据需要修改和扩展此示例,添加错误处理和进度更新等功能。
内容由零声教学AI助手提供,问题来源于学员提问