XDF是道客巴巴文件下载的文档格式,类似PDF。文档使用过程中,需要对不同文档进行分类以方便阅读,Qt XDF阅读管理提供文档阅读、分类和文件名查找,文本文件存储相关数据。

 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QDir>
#include <QListWidget>
#include <QListWidgetItem>
#include <QDesktopServices>
#include <QUrl>
#include <QTextStream>
#include <QMenu>
#include <QAction>
#include <QCollator>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QFont font;font.setPixelSize(26);setFont(font);setWindowTitle(QStringLiteral("XDF阅读管理"));mDirPath = QStringLiteral("D:\\123");ui->comboBox_type->setSizeAdjustPolicy(QComboBox::AdjustToContents);connect(ui->listWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(readXDF(QModelIndex)));ui->listWidget->setSelectionBehavior(QAbstractItemView::SelectItems);ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui->listWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(listWidgetMenu(QPoint)));getTypes();getDetails();QTimer::singleShot(0, this, SLOT(readFiles()));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::closeEvent(QCloseEvent *event)
{Q_UNUSED(event);
}void MainWindow::readFiles()
{QDir dir(mDirPath);if (!dir.exists()){return;}dir.setFilter(QDir::Files);dir.setSorting(QDir::Name);QFileInfoList fileInfoLst = dir.entryInfoList();if (fileInfoLst.isEmpty()){return;}mNameLst.clear();mFileMap.clear();foreach (QFileInfo fileInfo, fileInfoLst){if ((fileInfo.suffix().toLower() == "xdf") || (fileInfo.suffix().toLower() == "pdf")){QString name = fileInfo.fileName();QString path = fileInfo.absoluteFilePath();mNameLst.append(name);mFileMap.insert(name, path);}}QLocale cn(QLocale::Chinese);QCollator collator(cn);std::sort(mNameLst.begin(), mNameLst.end(), collator);foreach (QString name, mNameLst){addListWidgetItem(name, mFileMap.value(name));}updateLabel();
}void MainWindow::readXDF(const QModelIndex &index)
{Q_UNUSED(index);QString file = ui->listWidget->currentItem()->data(Qt::UserRole).toString();QDesktopServices::openUrl(QUrl::fromLocalFile(file));
}void MainWindow::getTypes()
{ui->comboBox_type->addItem(QStringLiteral("无"));QStringList dataLst = openReadFile("xdf_types.txt");foreach (QString data, dataLst){if (!data.isEmpty()){ui->comboBox_type->addItem(data);}}
}void MainWindow::getDetails()
{QStringList tmpLst;QStringList dataLst = openReadFile("xdf_details.txt");foreach (QString data, dataLst){if (!data.isEmpty()){if (!tmpLst.contains(data)){tmpLst.append(data);}}}mDetailMap.clear();dataLst = tmpLst;foreach (QString data, dataLst){if (!data.isEmpty()){QStringList lst = data.split(":");if (!mDetailMap.contains(lst[0])){QStringList valueLst;valueLst.append(lst[1]);mDetailMap.insert(lst[0], valueLst);}else{QStringList valueLst = mDetailMap.value(lst[0]);valueLst.append(lst[1]);mDetailMap.insert(lst[0], valueLst);}}}
}void MainWindow::updateLabel()
{ui->label->setText(QStringLiteral("%1个文件").arg(ui->listWidget->count()));
}void MainWindow::on_pushButton_search_clicked()
{QString keyword = ui->lineEdit_keyword->text();if (keyword.isEmpty() || keyword.trimmed().isEmpty()){return;}QStringList retLst;foreach (QString name, mFileMap.keys()){if (name.contains(keyword)){retLst.append(QStringLiteral("%1*%2").arg(name).arg(mFileMap.value(name)));}}if (retLst.isEmpty()){return;}ui->listWidget->clear();foreach (QString ret, retLst){addListWidgetItem(ret.split("*")[0], ret.split("*")[1]);}updateLabel();
}void MainWindow::on_pushButton_type_add_clicked()
{if (ui->comboBox_type->currentText() == QStringLiteral("无")){return;}if (ui->listWidget->currentItem()){QFile file(QStringLiteral("xdf_details.txt"));if (!file.open(QIODevice::Append | QIODevice::Text)){return;}QListWidgetItem *item = ui->listWidget->currentItem();QTextStream out(&file);out.setCodec("UTF-8");out << QStringLiteral("%1:%2\n").arg(ui->comboBox_type->currentText()).arg(item->text());file.close();getDetails();}
}void MainWindow::listWidgetMenu(QPoint point)
{QListWidgetItem *item = ui->listWidget->itemAt(point);if (item == nullptr){return;}QMenu *menu = new QMenu(this);QAction *addType = new QAction(QStringLiteral("添加分类"), this);menu->addAction(addType);connect(addType, SIGNAL(triggered(bool)), this, SLOT(addMultiType()));menu->exec(QCursor::pos());delete addType;delete menu;
}void MainWindow::addMultiType()
{if (ui->comboBox_type->currentText() == QStringLiteral("无")){return;}QStringList dataLst;QList<QListWidgetItem*> itemLst = ui->listWidget->selectedItems();foreach (QListWidgetItem *item, itemLst){dataLst.append(QStringLiteral("%1:%2\n").arg(ui->comboBox_type->currentText()).arg(item->text()));}QFile file(QStringLiteral("xdf_details.txt"));if (!file.open(QIODevice::Append | QIODevice::Text)){return;}QTextStream out(&file);out.setCodec("UTF-8");foreach (QString data, dataLst){out << data;}file.close();getDetails();
}QStringList MainWindow::openReadFile(QString fileName)
{QStringList dataLst;QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){return dataLst;}QTextStream in(&file);in.setCodec("UTF-8");dataLst = in.readAll().split("\n");return dataLst;
}void MainWindow::addListWidgetItem(QString name, QString path)
{QListWidgetItem *item = new QListWidgetItem;item->setText(name);item->setData(Qt::UserRole, path);ui->listWidget->addItem(item);
}void MainWindow::on_pushButton_type_search_clicked()
{if (ui->comboBox_type->currentText() == QStringLiteral("无")){ui->listWidget->clear();foreach (QString name, mNameLst){addListWidgetItem(name, mFileMap.value(name));}updateLabel();return;}QStringList nameLst = mDetailMap.value(ui->comboBox_type->currentText(), QStringList());if (nameLst.isEmpty()){return;}QLocale cn(QLocale::Chinese);QCollator collator(cn);std::sort(nameLst.begin(), nameLst.end(), collator);ui->listWidget->clear();foreach (QString name, nameLst){addListWidgetItem(name, mFileMap.value(name));}updateLabel();
}

Qt XDF阅读管理相关推荐

  1. 使用QT进行内存管理

    使用QT进行内存管理 Memory Management with Qt 使用QT进行内存管理 Garbage Collection through the Back Door 通过后门垃圾回收 Hi ...

  2. Qt Linguist 发行管理Release Manager

    Qt Linguist 发行管理Release Manager 发行管理Release Manager 创建翻译文件 使用lupdate 使用lrelease 缺少翻译 发行管理Release Man ...

  3. CIO Mini MBA 阅读管理书籍

    CIO Mini MBA 阅读管理书籍 陈东锋推荐,2012-5-28 企业战略.目标管理.管理体系 <平衡记分卡--化战略为行动>罗伯特.卡普兰等,广东经济出版社,2004. <目 ...

  4. Calibre for Mac v5.29.0电子书阅读管理工具

    Calibre Mac版是 macOS 系统上一款简单实用的电子书阅读管理工具,比普通的电子书软件相比,性能有了更高的提升,可以进行电子书的格式转换.阅读等,把你的电子书图书馆进行图书管理. 应用介绍 ...

  5. Calibre for Mac v5.20.0 中文版 电子书阅读管理工具

    Calibre Mac版是 macOS 系统上一款简单实用的电子书阅读管理工具,比普通的电子书软件相比,性能有了更高的提升,可以进行电子书的格式转换.阅读等,把你的电子书图书馆进行图书管理. 应用介绍 ...

  6. 入手查找阅读管理文献 | 来自科研小白的总结

    入手查找&阅读&管理文献 | 来自科研小白的总结 如何入手查找&阅读&管理文献 [查找了一些如何阅读文献的大牛经验分享] [文献分类1] [文献分类2] [数据库资源] ...

  7. Qt物联网综合管理平台源码

    Qt物联网综合管理平台源码 0.2.1 软件模块 设备监控模块,包括数据监控(表格形式展示).设备面板(面板形式展示).地图监控(地图形式展示).曲线监控(曲线形式展示). 数据查询模块,包括报警记录 ...

  8. (附源码)计算机毕业设计SSM专业书目推荐阅读管理

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. QT 常用布局管理器

    Qt布局管理详解 详解 QT 布局管理界面 图文并茂 QT主要布局管理器分类 QHBoxLayout(水平布局) 把子窗口从左到右排列在一个水平行上. QWidget *window = new QW ...

  10. Qt之布局管理——堆栈窗体

    QStackedWidget类继承于QFrame类,用于堆栈窗体的管理. Public Slots: void setCurrentIndex( int index )            inde ...

最新文章

  1. Python超越Java,Rust持续称王!Stack Overflow 2019开发者报告
  2. 非常强悍的 RabbitMQ 总结,写得真好
  3. 十四、JavaScript表单中的验证API
  4. iBatis.Net系列(一)-简介
  5. 用户空间使用内核头文件
  6. 网页中插入javascript的几种方法
  7. 在Linux和Mac OS X系统上运行.NET
  8. jave类命名_Java重命名文件– Jave移动文件
  9. leetcode(105)从前序遍历和中序遍历构建二叉树
  10. Mac m1 max 工具安装及简介
  11. 浏览器默认打开360搜索怎么办?
  12. 新型脑机接口实现无线通信
  13. 未来教育计算机二级office评分有问题,未来教育计算机二级-未来教育计算机二级msoffice题库评分 – 手机爱问...
  14. 数据结构实训——统计成绩
  15. antd源码解读 之 构建工具antd-tools
  16. Docker 配置阿里云加速
  17. 艾美捷—如何选择合适的SAM甲基转移酶活性分析试剂盒?
  18. 【Java知识点总结】Java 变量
  19. Unity中的Object和object的区别
  20. 体育计算机培训心得体会,关于体育培训学习心得体会5篇

热门文章

  1. canoe和python_CANoe开发从入门到精通
  2. Java支付宝app wap支付接入
  3. android框架揭秘之Java服务学习笔记
  4. Microsoft Windows XP SP3 官方原版镜像下载,绝对原版加系列号!
  5. c语言读取windows注册表,C\C++修改windows注册表
  6. Linux之校准服务器时间
  7. 《深入浅出统计学》读书笔记
  8. excel服务器数据同步修改,勤哲Excel服务器同步解决海量数据快速上传问题
  9. 稳压二极管真的可以稳压吗?
  10. Java获取打印机打印图片