-
UID:197924
-
- 注册时间2019-10-24
- 最后登录2025-03-19
- 在线时间214小时
-
- 发帖53
- 搜Ta的帖子
- 精华0
- 金钱2641
- 威望88
- 贡献值4
- 好评度58
-
访问TA的空间加好友用道具
|
—
本帖被 20091001753 从 Qt 作品展 移动到本区(2020-08-12)
—
实现功能: 1.支持动态更新,只需拷贝到程序根 目录即可,删除添加都及时更新到 界面2.支持 文件详细信息读取 3.支持显示zip、png、jpg、gif等文件 显示4.支持双击打开列表文件或目录 5.支持文件快速搜索 显示  搜索 相关实现代码,如下: - 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())));
- }
- }
- }
- }
|