#include "DialogFileOperation.h" #include "ui_dialogfileoperation.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include"HtmlDelegate.h" #include"myinclude.h" #include #include #include "LogInfo.h" // 递归复制目录/文件。true 表示全部成功,false 表示有失败 static bool copyRecursively(const QString &srcPath, const QString &dstPath) { QFileInfo srcInfo(srcPath); if (!srcInfo.exists()) return false; if (srcInfo.isDir()) { QDir dstDir(dstPath); if (!dstDir.exists()) { if (!QDir().mkpath(dstPath)) return false; } QDir srcDir(srcPath); QFileInfoList entries = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries); for (const QFileInfo &fi : entries) { QString src = fi.absoluteFilePath(); QString dst = QDir(dstPath).filePath(fi.fileName()); if (!copyRecursively(src, dst)) return false; } return true; } else { // 文件 if (QFile::exists(dstPath)) { QFile::remove(dstPath); } return QFile::copy(srcPath, dstPath); } } // 只复制 srcDirPath 根目录下的文件(不递归到子目录)。true 表示全部成功,false 表示有失败或源目录不存在 static bool copyFilesOneLevel(const QString &srcDirPath, const QString &dstDirPath) { QDir srcDir(srcDirPath); if (!srcDir.exists()) return false; QDir dstDir(dstDirPath); if (!dstDir.exists()) { if (!QDir().mkpath(dstDirPath)) return false; } QFileInfoList files = srcDir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot); bool allOk = true; for (const QFileInfo &fi : files) { QString src = fi.absoluteFilePath(); QString dst = dstDir.filePath(fi.fileName()); if (QFile::exists(dst)) QFile::remove(dst); if (!QFile::copy(src, dst)) { LogInfo::setRunStatusText(QString("Copy file failed: %1 -> %2").arg(src).arg(dst)); allOk = false; } } return allOk; } DialogFileOperation::DialogFileOperation(QWidget *parent) : QDialog(parent), ui(new Ui::DialogFileOperation) { ui->setupUi(this); this->setWindowTitle(tr("文件操作")); ui->textEditView->setReadOnly(true); ui->textEditView->setLineWrapMode(QTextEdit::NoWrap); ui->textEditView->document()->setDocumentMargin(0); this->setFixedSize(this->geometry().width(),this->geometry().height()); EditMode=4; } void DialogFileOperation::refreshListView(int mode){ QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; QDir dir(dirPath); QStringList filters; EditMode = mode; if(mode==TXTFILE) filters << "*.html" << "*.txt" << "*.TXT" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP"<< "*.bin"; // txtmode // else if(mode==PICFILE) filters << "*.png";// <<"*.jpg" ; // picmode else if(mode==PICFILE) filters << "*.png" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP"; else if(mode==SCENE) filters << "*.xml"; else filters << "*.html" << "*.bmp" << "*.BMP"<<"*.jpg"<<"*.gif"; dir.setNameFilters(filters); dir.setFilter(QDir::Files); #ifndef EnableArabic QStringListModel *model = new QStringListModel(dir.entryList()); #else QStringList entries=dir.entryList(); QStandardItemModel *model = new QStandardItemModel(); for(int i=0;i%1%2").arg(subname).arg(subsuffix2); QStandardItem *item2 = new QStandardItem(stringhtml); model->appendRow(item2); } }else{ model->appendRow(item1); } } } ui->listViewFile->setItemDelegate(new HtmlDelegate); #endif ui->listViewFile->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->listViewFile->setModel(model); //useList是个QListView int count = ui->listViewFile->model()->rowCount(); if(count){ QModelIndex index = ui->listViewFile->model()->index(0 , 0); ui->listViewFile->setCurrentIndex(index); on_listViewFile_entered(index); } } DialogFileOperation::~DialogFileOperation() { delete ui; } void DialogFileOperation::on_listViewFile_entered(const QModelIndex &index) { #ifdef EnableArabic QString fileName=index.data().toString(); if(fileName.endsWith("")){ QTextDocument doc; doc.setHtml(fileName); fileName= doc.toPlainText(); int position = fileName.lastIndexOf("."); fileName.insert(position,".a"); } #endif QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; #ifndef EnableArabic QString filePath = dirPath + index.data().toString(); #else QString filePath = dirPath + fileName; #endif if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") || filePath.endsWith(".png") || filePath.endsWith(".bmp")|| filePath.endsWith(".BMP")|| filePath.endsWith(".nda")){ ui->textEditView->clear(); ui->textEditView->setHtml(QString("").arg(filePath)); } else if(filePath.endsWith(".xml")) { emit createSceneImage(filePath); ui->textEditView->setHtml(QString("").arg("./printSceneView.png")); } else { QFile file(filePath); if (!file.open(QFile::ReadOnly)) return ; if (filePath.endsWith(".txt") || filePath.endsWith(".TXT")) { qint64 size = file.size(); if(size/1024 > 10) { return; } } QByteArray data = file.readAll(); QTextCodec *codec = Qt::codecForHtml(data); QString str = codec->toUnicode(data); if (Qt::mightBeRichText(str)) { if(!ui->radioButtonLocal->isChecked()) str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //必须替换相应的路径 ui->textEditView->setHtml(str); } else { str = QString::fromLocal8Bit(data); ui->textEditView->setPlainText(str); } } } void DialogFileOperation::on_listViewFile_clicked(const QModelIndex &index) { on_listViewFile_entered(index); } void DialogFileOperation::on_pushButtonNext_pressed() { QModelIndex currIndex = ui->listViewFile->currentIndex(); int count = ui->listViewFile->model()->rowCount(); if(count){ QModelIndex index = ui->listViewFile->model()->index((currIndex.row() + 1)%count, 0); ui->listViewFile->setCurrentIndex(index); on_listViewFile_entered(index); } } void DialogFileOperation::on_pushButtonLast_pressed() { QModelIndex currIndex = ui->listViewFile->currentIndex(); int count = ui->listViewFile->model()->rowCount(); if(count){ QModelIndex index = ui->listViewFile->model()->index(currIndex.row() == 0?(count - 1):(currIndex.row() - 1), 0); ui->listViewFile->setCurrentIndex(index); on_listViewFile_entered(index); } } void DialogFileOperation::on_pushButtonExit_pressed() { hide(); } void DialogFileOperation::on_pushButtonDelFile_pressed() { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("是否确认删除当前文件?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ QModelIndex index = ui->listViewFile->currentIndex(); int currRow = index.row(); QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; #ifndef EnableArabic QString filePath = dirPath + index.data().toString(); #else QString fileName=index.data().toString(); if(fileName.endsWith("")){ QTextDocument doc; doc.setHtml(fileName); fileName= doc.toPlainText(); int position = fileName.lastIndexOf("."); fileName.insert(position,".a"); } QString filePath=dirPath+fileName; #endif QFile file(filePath); if(!QFileInfo(filePath).baseName().startsWith("UP")){ if(file.exists())file.remove(); file.setFileName(PARA_ROOT_DIR + QFileInfo(filePath).baseName()+".dpn" ); //file.setFileName( PARA_ROOT_DIR + QFileInfo(filePath).baseName()+".dpn" ); if(file.exists())file.remove(); } //Public::resetPara(); // 20140923 这个BUG导致系统参数被恢复 refreshListView(EditMode); int count = ui->listViewFile->model()->rowCount(); if(count){ index = ui->listViewFile->model()->index((currRow > (count - 1))?(count - 1):currRow , 0); ui->listViewFile->setCurrentIndex(index); on_listViewFile_entered(index); } } } void DialogFileOperation::on_pushButtonDelAll_pressed() { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("警告"), tr("是否确认删除所有文件?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; // 删除所有文件的方法要改进 system((char *)((QString("mkdir %1").arg(TESTDIR)).toLatin1().data())); system((char *)((QString("cp %1/UP* %2/. ").arg(DOC_ROOT_DIR).arg(TESTDIR)).toLatin1().data())); //先备份UP* system((char *)((QString("rm %1/*.*").arg(dirPath)).toLatin1().data()));// 删除所有打印文件 system((char *)((QString("rm %1*.ini").arg(PARA_ROOT_DIR)).toLatin1().data())); // 删除所有参数文件 system((char *)((QString("rm %1*.dpn").arg(PARA_ROOT_DIR)).toLatin1().data())); system((char *)((QString("cp %1/UP.* %1/UP1.* %2/. ").arg(TESTDIR).arg(DOC_ROOT_DIR)).toLatin1().data())); //system((char *)((QString("cp %1* %2/. ").arg(TESTDIR).arg(PARA_ROOT_DIR)).toLatin1().data())); refreshListView(EditMode); } } void DialogFileOperation::on_pushButtonImport_pressed() { QMessageBox::StandardButton ret; ret = QMessageBox::information(this, tr("提示"), tr("是否确认从U盘导入所有文件?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ bool ok = true; // 拷贝参数文件 QString srcHi = QDir(UDISK_DOC_ROOT_DIR).filePath("VoltParaHi.bin"); QString dstHi = QDir(PARA_ROOT_DIR).filePath("VoltParaHi.bin"); if (QFile::exists(srcHi)) { if (QFile::exists(dstHi)) QFile::remove(dstHi); if (!QFile::copy(srcHi, dstHi)) { LogInfo::setRunStatusText("Copy VoltParaHi.bin failed"); ok = false; } } QString srcStd = QDir(UDISK_DOC_ROOT_DIR).filePath("VoltParaStd.bin"); QString dstStd = QDir(PARA_ROOT_DIR).filePath("VoltParaStd.bin"); if (QFile::exists(srcStd)) { if (QFile::exists(dstStd)) QFile::remove(dstStd); if (!QFile::copy(srcStd, dstStd)) { LogInfo::setRunStatusText("Copy VoltParaStd.bin failed"); ok = false; } } // 复制 U 盘文档到本地(仅复制一级文件,不递归) bool cpOk = copyFilesOneLevel(UDISK_DOC_ROOT_DIR, DOC_ROOT_DIR); qDebug() << "copyRecursively import result:" << cpOk; QProcess::execute("sync"); refreshListView(EditMode); if (ok && cpOk) { QMessageBox::information(this, tr("提示"), tr("成功从U盘导入")); } else { QMessageBox::warning(this, tr("警告"), tr("从U盘导入时部分文件失败")); } } } void DialogFileOperation::on_pushButtonExport_pressed() { QMessageBox::StandardButton ret; ret = QMessageBox::information(this, tr("提示"), tr("是否确认将所有文件导出到U盘?"), QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; QDir dir(UDISK_DOC_ROOT_DIR); if(!dir.exists()){ if (!QDir().mkpath(UDISK_DOC_ROOT_DIR)){ QMessageBox::warning(this,tr("警告"),tr("U盘doc目录创建失败")); return; } } // 仅复制本地文档根目录下的文件到 U 盘(不递归) bool ok = copyFilesOneLevel(DOC_ROOT_DIR, UDISK_DOC_ROOT_DIR); QProcess::execute("sync"); refreshListView(EditMode); if (ok) { QMessageBox::information(this, tr("提示"), tr("成功导出到U盘")); } else { QMessageBox::warning(this, tr("警告"), tr("导出到U盘时有文件失败")); } } } void DialogFileOperation::on_pushButtonInsert_clicked() { QModelIndex index = ui->listViewFile->currentIndex(); QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; #ifndef EnableArabic QString filePath = dirPath + index.data().toString(); #else QString fileName=index.data().toString(); if(fileName.endsWith("")){ QTextDocument doc; doc.setHtml(fileName); fileName= doc.toPlainText(); int position = fileName.lastIndexOf("."); fileName.insert(position,".a"); } QString filePath = dirPath + fileName; #endif emit openFile(filePath,true); hide(); } void DialogFileOperation::on_pushButtonOpen_clicked() { QModelIndex index = ui->listViewFile->currentIndex(); QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR; #ifndef EnableArabic QString filePath = dirPath + index.data().toString(); #else QString fileName=index.data().toString(); if(fileName.endsWith("")){ QTextDocument doc; doc.setHtml(fileName); fileName= doc.toPlainText(); int position = fileName.lastIndexOf("."); fileName.insert(position,".a"); } QString filePath = dirPath + fileName; #endif emit openFile(filePath,false); hide(); } void DialogFileOperation::on_radioButtonLocal_released() { refreshListView(EditMode); } void DialogFileOperation::on_radioButtonUdisk_released() { QDir dir(UDISK_DOC_ROOT_DIR); if(!dir.exists()){ dir.mkdir("/udisk/doc"); QMessageBox::warning(0,tr("警告"),tr("U盘未插入或U盘根目录下的doc文件夹不存在!")); } refreshListView(EditMode); } void DialogFileOperation::modbus_openfile(QString filename) { emit openFile(filename,true); }