查看完整版本: [-- demo源码管理器 --]

QTCN开发网 -> Qt代码秀 -> demo源码管理器 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

xiaoke123 2020-08-12 16:02

demo源码管理器

实现功能:
1.支持动态更新,只需拷贝到程序根目录即可,删除添加都及时更新到界面
2.支持文件详细信息读取
3.支持显示zip、png、jpg、gif等文件显示
4.支持双击打开列表文件或目录
5.支持文件快速搜索
显示
[attachment=21814]
搜索
[attachment=21815]



相关实现代码,如下:
  1. 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())));
                }
            }
        }
    }













nigoole 2020-08-13 14:16
放个完整的工程出来吧!感觉挺不错的!

w642833823 2020-08-14 14:21
求看完整工程。

huaiqishizu 2021-03-12 17:36
大佬,求源码

hongmofang 2021-04-11 16:05
思路不错

liudianwu 2021-08-03 19:56
小可大佬,这个可以大大提升白嫖的效率

xiaoke123 2021-08-31 17:45
liudianwu:小可大佬,这个可以大大提升白嫖的效率 (2021-08-03 19:56) 

提升搬砖效率

zhao4565821 2021-09-27 11:41
求源码


查看完整版本: [-- demo源码管理器 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled