xiaoke123 |
2020-08-12 16:02 |
demo源码管理器
实现功能: 1.支持动态更新,只需拷贝到程序根目录即可,删除添加都及时更新到界面 2.支持文件详细信息读取 3.支持显示zip、png、jpg、gif等文件显示 4.支持双击打开列表文件或目录 5.支持文件快速搜索 显示 [attachment=21814] 搜索 [attachment=21815]
相关实现代码,如下:
- void Widget::initTableData()
{ //ui->tableWidget->clear(); // 连表头清掉 ui->tableWidget->clearContents();// 只清理数据 QString appDir = QCoreApplication::applicationDirPath()+"/examples"; qDebug() << "app dir: " << appDir; QStringList Folderlist; GetAllFileFolder(appDir,Folderlist);
int rowCount = Folderlist.count(); ui->tableWidget->setRowCount(rowCount); for (int i = 0; i < rowCount; i++) { qDebug() << "FileFolder Path ----------- ="<< Folderlist.at(i); QStringList Filelist; countFile(Folderlist.at(i),Filelist);
int first = Folderlist.at(i).lastIndexOf ("/"); QString FolderName = Folderlist.at(i).right (Folderlist.at(i).length ()-first-1); qDebug() << "FolderName ----------- ="<< FolderName;
ui->tableWidget->setRowHeight(i, 150);
// 默认以遍历的文件主 QString file,desc,pic,gif; foreach (QString filePath , Filelist) { if(filePath.contains(".zip") || filePath.contains(".7z") || filePath.contains(".tar.xz") || filePath.contains(".tar.gz")) file = filePath; if(filePath.contains(".info")|| filePath.contains(".txt")) desc = filePath; if(filePath.contains(".png") || filePath.contains(".jpg")) pic = filePath; if(filePath.contains(".gif") ) gif = filePath; } // 没有源码文件 就显示目录 if(file.isEmpty()) file = Folderlist.at(i)+"/"; //ReadInfo(file);
QTableWidgetItem *itemID = new QTableWidgetItem(QString::number(i + 1)); QTableWidgetItem *itemName = new QTableWidgetItem(FolderName); QTableWidgetItem *itemFile = new QTableWidgetItem(file); QTableWidgetItem *itemTime = new QTableWidgetItem(QFileInfo(file).created().toString("创建时间 yyyy-MM-dd hh:mm:ss"));//QTableWidgetItem *itemTime = new QTableWidgetItem(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); QTableWidgetItem *itemSize = new QTableWidgetItem(QString("%1 Bytes").arg(QFileInfo(file).size())); QTableWidgetItem *itemDesc = new QTableWidgetItem(ReadDesc(desc));
itemID->setTextAlignment(Qt::AlignCenter); itemName->setTextAlignment(Qt::AlignCenter); itemFile->setTextAlignment(Qt::AlignCenter); itemSize->setTextAlignment(Qt::AlignCenter); itemTime->setTextAlignment(Qt::AlignCenter); itemDesc->setTextAlignment(Qt::AlignCenter);
ui->tableWidget->setItem(i, 0, itemID); ui->tableWidget->setItem(i, 1, itemName); ui->tableWidget->setItem(i, 2, itemFile); ui->tableWidget->setItem(i, 3, itemSize); ui->tableWidget->setItem(i, 4, itemTime); ui->tableWidget->setItem(i, 5, itemDesc); // 方法二 //{ // QLabel* labdesc = new QLabel(ReadDesc(desc)); // labdesc->setProperty("flag", desc); // labdesc->setAlignment(Qt::AlignCenter); // ui->tableWidget->setCellWidget(i, 4, labdesc); //}
{ // 缩略图 先判断默认的 没有再判断同名是否存在 if(!fileIsExist(pic)) { if(fileIsExist(QString("%1/%2%3").arg(Folderlist.at(i)).arg(FolderName).arg(".png"))) pic = QString("%1/%2%3").arg(Folderlist.at(i)).arg(FolderName).arg(".png"); else if(fileIsExist(QString("%1/%2%3").arg(Folderlist.at(i)).arg(FolderName).arg(".jpg"))) pic = QString("%1/%2%3").arg(Folderlist.at(i)).arg(FolderName).arg(".jpg"); else pic = "无相关图片!"; } if(pic != "无相关图片!") { QLabel* labpng = new QLabel; QPixmap *pixmap = new QPixmap(pic); pixmap->scaled(labpng->size(), Qt::KeepAspectRatio); labpng->setMargin(3); labpng->setScaledContents(true); labpng->setPixmap(*pixmap); labpng->setProperty("flag", pic); ui->tableWidget->setCellWidget(i, 6, labpng); }else { QLabel* labpng = new QLabel(pic); labpng->setProperty("flag", pic); labpng->setAlignment(Qt::AlignCenter); ui->tableWidget->setCellWidget(i, 6, labpng); } }
{ // 动图 先判断默认的 没有再判断同名是否存在 if(!fileIsExist(gif)) { if(fileIsExist(QString("%1/%2%3").arg(Folderlist.at(i)).arg(FolderName).arg(".gif"))) gif = QString("%1/%2%3").arg(Folderlist.at(i)).arg(FolderName).arg(".gif"); else gif = "无相关动图!"; } if(gif != "无相关动图!") { QLabel* emotionIcon = new QLabel; QMovie* movie = new QMovie; movie->setScaledSize(QSize(180,150)); movie->setFileName(gif); movie->start(); emotionIcon->setMargin(3); emotionIcon->setMovie(movie); emotionIcon->setProperty("flag", gif); // ui->tableWidget->setCellWidget(i, 7, emotionIcon); }else { QLabel* emotionIcon = new QLabel(gif); emotionIcon->setProperty("flag", gif); emotionIcon->setAlignment(Qt::AlignCenter); ui->tableWidget->setCellWidget(i, 7, emotionIcon); } } } }
QFileInfo Widget::ReadInfo(const QString &fileName) { QFileInfo info(fileName); QString infoList; if (info.exists()) { qDebug() << QString("文件名称: %1 \n").arg(info.fileName()); qDebug() << QString("文件大小: %1 Bytes\n").arg(info.size()); qDebug() << QString("创建时间: %1 \n").arg(info.created().toString("yyyy-MM-dd hh:mm:ss")); qDebug() << QString("修改时间: %1 \n").arg(info.lastModified().toString("yyyy-MM-dd hh:mm:ss")); qDebug() << QString("读取时间: %1 \n").arg(info.lastRead().toString("yyyy-MM-dd hh:mm:ss"));
infoList += tr("文件名称: %1 \n").arg(info.fileName()); infoList += tr("文件大小: %1 Bytes\n").arg(info.size()); infoList += tr("创建时间: %1 \n").arg(info.created().toString("yyyy-MM-dd hh:mm:ss")); infoList += tr("修改时间: %1 \n").arg(info.lastModified().toString("yyyy-MM-dd hh:mm:ss")); infoList += tr("读取时间: %1 \n").arg(info.lastRead().toString("yyyy-MM-dd hh:mm:ss")); } return info; }
QString Widget::ReadDesc(const QString &filePath) { QString strAll; QFile file(filePath); if (!file.open(QIODevice::ReadOnly|QIODevice::Text))//打开指定文件 { //QMessageBox::about(NULL, "文件", "文件打开失败"); qDebug() << "文件打开失败! ----------- ="<< filePath; strAll = "无相关描述!"; return strAll; }
QTextCodec *codec = QTextCodec::codecForName("UTF-8"); strAll=codec->toUnicode(file.readAll()); file.close(); return strAll; }
bool Widget::fileIsExist(const QString &strFile) { QFile tempFile(strFile); return tempFile.exists(); }
bool Widget::checkFile(const QString &fileName) { if (fileName.startsWith("moc_") || fileName.startsWith("ui_") || fileName.startsWith("qrc_")) { return false; }
QFileInfo file(fileName); QString suffix = "*." + file.suffix(); QString filter = "*.zip *.7z *.gz *.xz *.txt *.info *.png *.jpg *.gif";//ui->txtFilter->text().trimmed(); QStringList filters = filter.split(" "); return filters.contains(suffix); }
void Widget::countFile(const QString &filePath, QStringList &files) { QDir dir(filePath); foreach (QFileInfo fileInfo , dir.entryInfoList()) { if (fileInfo.isFile()) { QString strFileName = fileInfo.fileName(); if (checkFile(strFileName)) { files << fileInfo.filePath(); qDebug()<<"fileInfo.filePath ----------- ="<< fileInfo.filePath(); } } else { if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") { continue; } // 递归找出文件 countFile(fileInfo.absoluteFilePath(),files); } } }
void Widget::GetAllFileFolder(const QString &dirPath, QStringList &folders) { QDir dir(dirPath); dir.setFilter(QDir::Dirs);
foreach(QFileInfo fullDir, dir.entryInfoList()) { if(fullDir.fileName() == "." || fullDir.fileName() == "..") continue; folders.push_back(fullDir.absoluteFilePath()); this->GetAllFileFolder(fullDir.absoluteFilePath(), folders); } }
void Widget::cellDoubleClicked(int x, int y) { qDebug() << QStringLiteral("cellClicked row=%1 column=%2-------------------- item ").arg(x).arg(y); if(y == 1 || y == 2 || y == 4) { QString strfolder = ui->tableWidget->item(x,2)->text(); qDebug() << "open folder: "<< strfolder.left(strfolder.lastIndexOf ("/")); QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(strfolder.left(strfolder.lastIndexOf ("/")))));
} if(y == 5 || y == 6) { QWidget *cellWidget = ui->tableWidget->cellWidget(x, y); qDebug() << cellWidget; if(cellWidget) { // 利用flag 属性 获取内容 QLabel *Label = (QLabel *)cellWidget; if(Label) { qDebug() << "open file: " <<Label->property("flag").toString(); QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(Label->property("flag").toString()))); } } } }
|
|