当前位置: 首页 > news >正文

Qt实践项目:仿Everything软件实现一个QtEverything

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。
如果觉得本文能帮到您,麻烦点个赞👍呗!

近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️

在这里插入图片描述

Qt实践项目:仿Everything软件实现一个QtEverything

学习笔记

  • Qt实践项目:仿Everything软件实现一个QtEverything
    • 一、前言:
    • 二、功能点:
      • 功能点一:文件查找与现实
        • 0、知识点
        • 1、 确定需求
        • 2、 查找和文件目录选择
        • 3、自定义排序
        • 4、文件图标获取
        • 4、 功能实现
      • 功能点二: 为搜索结果增加右键菜单
        • 0、 知识点
        • 1、 菜单栏功能实现
        • 2、删除文件名实现函数
        • 3、打开文件实现函数
        • 4、功能实现
      • 功能点三:快捷键与托盘
        • 0、知识点
      • 功能点四:实现模糊查询。
        • 0、知识点:
        • 1、 确定需求
      • 功能五 :中文搜索
        • 0、 知识点:
        • 1、第三方库地问题
      • 功能点六: 目录更新问题
        • 0、知识点
        • 1、**实现步骤**
        • 2、功能实现
      • 功能点七:其他
    • 三、总结
    • 四、讨论

一、前言:

最近刚好重新学习了一下Qt的知识,觉得知识点之间还是比较散乱,网上大部份书籍的例子也比较零碎,想找个一个实战的项目将一些知识点穿起来,同时项目本身又比较有趣,可以进行不断地优化,发现文件查找器系统是个很有趣的实践项目。

作为Qt的入门项目,我个人觉得这个项目真的是太棒了,涵盖了许多知识点,同时还可以对此不断地进行优化。

本文将对Qt文件查找系统进行技术总结。该系统包含了许多技术细节,包括文件管理器的打开、记忆下拉框内容、filetable的使用、文件信息显示、文件图标获取、自定义排序、QFileSystemWatch 监视文件目录、变化后重新加载目录、库的制作、qmake使用、makefile生成外部库后引入到项目中、Qt调用第三方库的方法、表格激活状态下选中右键、右键菜单、删除功能实现、启动文件、复制文件名以及检测剪切板、快捷键使用、快捷键冲突、窗口焦点捕获、托盘、系统消息设置、正则化表达式的书写、正则化表达式的应用、模糊匹配中按照顺序进行匹配、模糊匹配中遇到空格的处理、模糊匹配算法的优化、以及如何提高模糊查询的效率(QtConcurrent)。

如果你觉得这篇文章帮到了你,欢迎点赞+收藏+评论, 对系统感兴趣的,欢迎订阅这个专栏欧,后面代码会放到专栏中,并在这个专栏里进行更新讲解欧!感谢支持⭐️❤️

二、功能点:

  • 🔔基本文件查找功能
  • 📁 操作搜索结果
  • ⌨️ 快捷键与托盘系统
  • 🔍 实现模糊查询
  • 🙊 拼音转换搜索中文
  • 🔍目录更新监控
  • 🔍文件查找优化—缓存查询
  • 🔍文件查找优化—多线程查找
  • 其他(正在开发)

将作业要求分为了七个功能点,每个功能点下会列出需要地知识点,

功能点的实现是这些知识点的最佳实践

这个项目个人觉得非常有意思,所以花了一些时间去设计,也遇到了挺多Bug的,最近在忙着毕业设计,在论文写完后,后面会尝试对这个项目进行优化地,如果有兴趣地小伙伴可以关注一下专栏后期会一直在上面进行更新地,一周至少更新一篇。

功能点一:文件查找与现实

0、知识点

  • 打开文件管理器进行目录选择
  • 记忆下拉框的内容
  • filetable使用
  • 文件信息显示
  • 文件图标的获取
  • 自定义排序

1、 确定需求

要想实现文件查找功能大致分为以下几步:

要使用Qt实现一个类似Everything文件搜索工具,可以按照以下步骤进行:

  1. 创建一个Qt GUI应用程序,并添加一个窗口作为搜索工具的主界面。
  2. 在主界面中添加一个文本框用于输入搜索关键字,以及一个搜索按钮用于触发搜索操作。
  3. 在搜索按钮的点击事件中,获取用户输入的搜索关键字,然后遍历文件系统中的所有文件和目录,并筛选出符合搜索关键字的文件和目录。
  4. 使用QtQFileSystemModel类来遍历文件系统中的文件和目录。QFileSystemModel类是一个模型-视图类,可以用来访问本地文件系统中的文件和目录。
  5. 在遍历文件系统的过程中,可以使用QRegExp类来匹配搜索关键字。QRegExp类是Qt中的正则表达式类,可以用来进行高级字符串匹配操作。
  6. 使用Qt的QTableView类来显示搜索结果。QTableView类是一个表格视图类,可以用来显示数据。可以将搜索结果显示为表格,并在表格中显示文件名、文件路径、文件大小和文件修改日期等信息。

关于显示地结果:

  1. 在搜索栏输入关键字,快速搜索系统桌面目录里的文件和文件夹,展示在列表中,包含程序图标、名称、路径、大小信息。

注:

​ a. 文件夹无需展示大小

​ b. 搜索结果无需包含桌面文件夹中的子文件和子文件夹;

文件夹无需显示大小:

        // 大小QTableWidgetItem *sizeItem = nullptr;// 如果是目录则sizeItem值为空QFileInfo fileInfo(filePath);if(fileInfo.isDir()){// 如果是目录,直接设置为nullptr, 不显示大小sizeItem = nullptr;}else{// 如果是目录,计算文件大小并设置为sizeItemsizeItem =  new QTableWidgetItem(tr("%1 KB").arg(int((size + 1023) / 1024)));sizeItem->setData(absoluteFileNameRole, QVariant(filePath));sizeItem->setToolTip(toolTip);sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable);}

2、 查找和文件目录选择

如果是只通过编写代码的话,就直接通过connect函数进行槽的绑定就可以啦。

这里主要尝试ui下的槽函数,可视化添加槽。

具体的槽函数实现功能:

// 当查找的按钮被触碰时触发的槽函数
void MainWindow::on_findButton_clicked()
{// 注意这里用的filesTable 是wiget类型的ui->filesTable->setRowCount(0);QString fileName = ui->fileComboBox->currentText();QString text = ui->textComboBox->currentText();QString path = QDir::cleanPath(ui->directoryCombox->currentText());// 查找并显示文件currentDir = QDir(path);// 更新目录watcher.removePath(currentDir.path());watcher.addPath(path);findFilesInDirectory(path, ui->fileComboBox->currentText(), ui->textComboBox->currentText());QStringList files;// 文件名进行查找文件findRecursion(path, fileName.isEmpty() ? QStringLiteral("*") : fileName, &files);// 在已经查找出的文件进一步查找哪些包含了textif(!text.isEmpty())files = findFiles(files, text);files.sort();showFiles(files);
}

目录选择

void MainWindow::on_broweButton_clicked()
{QString directory = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this,tr("Find Files"),QDir::currentPath()));if(!directory.isEmpty()){if(ui->directoryCombox->findText(directory) == -1)ui->directoryCombox->addItem(directory);ui->directoryCombox->setCurrentIndex(ui->directoryCombox->findText(directory));}
}

3、自定义排序

    // 表头排序指示器ui->filesTable->setSortingEnabled(true); // 允许排序ui->filesTable->horizontalHeader()->setSortIndicatorShown(true); // 显示排序指示器

具体实现:

void MainWindow::createFilesTable()
{ui->filesTable = new QTableWidget(0,3);ui->filesTable->setSelectionBehavior(QAbstractItemView::SelectRows);QStringList labels;labels << tr("Filename") <<tr("Path")<< tr("Size");ui->filesTable->setHorizontalHeaderLabels(labels);ui->filesTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);ui->filesTable->verticalHeader()->hide();ui->filesTable->setShowGrid(false);// 表头排序指示器
//    ui->filesTable->setSortingEnabled(true); // 允许排序
//    ui->filesTable->horizontalHeader()->setSortIndicatorShown(true); // 显示排序指示器// 菜单ui->filesTable->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui->filesTable, &QTableWidget::customContextMenuRequested,this, &MainWindow::contextMenu);connect(ui->filesTable, &QTableWidget::cellActivated,this, &MainWindow::openFileOfItem);
}

不过有点问题:

因为size字段带了单位后是字符,字符的大小比较会有点问题,因此在实现中先关闭。

解决办法

1、通过文本排序QTextListFormatstyleindex进行排序。

2、lamb表达式对排序规则进行自定义。

4、文件图标获取

 QIcon icon = iconProvider.icon(filePath);

具体实现:

void MainWindow::showFiles(const QStringList &paths)
{QFileIconProvider iconProvider;for(const QString &filePath : paths){// 获取图标const QString toolTip = QDir::toNativeSeparators(filePath);const QString relativePath = QDir::toNativeSeparators(currentDir.relativeFilePath((filePath)));const qint64 size = QFileInfo(filePath).size();QIcon icon = iconProvider.icon(filePath);QTableWidgetItem *fileNameItem = new QTableWidgetItem(relativePath);fileNameItem->setData(absoluteFileNameRole, QVariant(filePath));fileNameItem->setToolTip(toolTip);fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);// 添加图标进入名称的位置fileNameItem->setIcon(icon);// 添加路径QTableWidgetItem *pathItem = new QTableWidgetItem(filePath);pathItem->setData(absoluteFileNameRole, QVariant(filePath));pathItem->setToolTip(toolTip);pathItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);// 大小QTableWidgetItem *sizeItem = nullptr;// 如果是目录则sizeItem值为空QFileInfo fileInfo(filePath);if(fileInfo.isDir()){// 如果是目录,直接设置为nullptr, 不显示大小sizeItem = nullptr;}else{// 如果是目录,计算文件大小并设置为sizeItemsizeItem =  new QTableWidgetItem(tr("%1 KB").arg(int((size + 1023) / 1024)));sizeItem->setData(absoluteFileNameRole, QVariant(filePath));sizeItem->setToolTip(toolTip);sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable);}int row = ui->filesTable->rowCount();ui->filesTable->insertRow(row);ui->filesTable->setItem(row, 0, fileNameItem);ui->filesTable->setItem(row, 1, pathItem);ui->filesTable->setItem(row, 2, sizeItem);}ui->fileFoundLabel->setText(tr("%n file(s) found (Double click on a file to open it)", nullptr, paths.size()));ui->fileFoundLabel->setWordWrap(true);
}

4、 功能实现

image-20230219104015295

image-20230309165536195

功能点二: 为搜索结果增加右键菜单

  • 功能点二: 为搜索结果增加右键菜单,右键中菜单中包含启动和删除功能;

0、 知识点

  • 表格激活状态下选中右键
  • 右键菜单
  • 删除功能实现
  • 启动文件
  • 复制文件名以及检测剪切板

1、 菜单栏功能实现

createFilesTable函数中实现

    // 菜单ui->filesTable->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui->filesTable, &QTableWidget::customContextMenuRequested,this, &MainWindow::contextMenu);connect(ui->filesTable, &QTableWidget::cellActivated,this, &MainWindow::openFileOfItem);
void MainWindow::contextMenu(const QPoint &pos)
{const QTableWidgetItem *item = ui->filesTable->itemAt(pos);if(!item)return;QMenu menu;
#ifndef QT_NO_CLIPBOARDQAction *copyAction = menu.addAction("Copy Name");
#endifQAction *openAction = menu.addAction("Open");deleteAction = menu.addAction("delete");QAction *action = menu.exec(ui->filesTable->mapToGlobal(pos));if(!action)return;const QString fileName = fileNameOfItem(item);if(action == openAction)openFile(fileName);else if (action == deleteAction){qDebug()<<"deleteAction"<<endl;deleteFileFromContextMenu();
//       connect(deleteAction, &QAction::triggered, this, &MainWindow::deleteFileFromContextMenu);}
#ifndef QT_NO_CLIPBOARDelse if (action == copyAction)QGuiApplication::clipboard()->setText(QDir::toNativeSeparators(fileName));
#endif
}

具体的实现思路:

  1. 需要定义一个QAction
  2. 根据QAction 唤醒对应的功能

2、删除文件名实现函数

void MainWindow::deleteFileFromContextMenu()
{QList<QTableWidgetItem *> selectedItems = ui->filesTable->selectedItems();QMessageBox::StandardButton reply = QMessageBox::question(this, tr("Delete"), tr("Are you sure to delete the selected files?"), QMessageBox::Yes | QMessageBox::No);if (reply == QMessageBox::Yes) {for (QTableWidgetItem *item : selectedItems) {QString filePath = item->data(absoluteFileNameRole).toString();QFile file(filePath);file.remove();ui->filesTable->removeRow(item->row());}}
}

3、打开文件实现函数

oid MainWindow::openFile(const QString &fileName)
{QDesktopServices::openUrl(QUrl::fromLocalFile(fileName));
}

4、功能实现

image-20230216202016396

功能点三:快捷键与托盘

  • 功能点三:程序启动后默认隐藏,通过alt+空格 唤出,再次按下 alt+空格 隐藏;

0、知识点

  • 快捷键使用
  • 快捷键冲突
  • 窗口焦点捕获
  • 托盘
  • 系统消息设置

详细内容将更新在专栏中,有兴趣的小伙伴可以关注这个专栏 😄😄😄

功能点四:实现模糊查询。

0、知识点:

  • 正则化表达式的书写
  • 正则化表达式的应用
  • 模糊匹配中按照顺序进行匹配
  • 模糊匹配中遇到空格的处理
  • 模糊匹配算法的优化
  • 如何提高模糊查询的效率(QtConcurrent)

1、 确定需求

要实现模糊查询,您可以使用正则化表达式来匹配文件名。正则表达式可以匹配类似于通配符的模式,并可以通过捕获组提取有用的信息。

这个功能真是饶了太久了,一开始没弄清楚需求。

先说一下需求是这样的:

支持模糊匹配搜索,例如输入“wps”,能够搜到 “wps.exe”也能搜到 “windows powsershell.exe";

需要定位到需要修改的函数。

详细内容将更新在专栏中,有兴趣的小伙伴可以关注这个专栏 😄😄😄

功能五 :中文搜索

  • 中文名称的程序支持通过拼音首字母进行搜索,例如输入"wx", 能够搜到 "微信”程序;

支持模糊匹配搜索,例如输入“wps”,能够搜到 “wps.exe”也能搜到 “windows powsershell.exe"; 中文搜索问题。

可以按照以下步骤进行实现:

0、 知识点:

  • 库的制作
  • qmake使用
  • makefile生成外部库后引入到项目中
  • Qt调用第三方库的方法

1、第三方库地问题

pinyin4cpp 有点坑啊。。。 很多词都对不上的!!!

比如微信生成的居然是wei wei早知道这么垃圾就不用了。。。

留下一个坑待修复:

image-20230219090147433

详细内容将更新在专栏中,有兴趣的小伙伴可以关注这个专栏 😄😄😄

            // some bug in hereHanyuPinyinOutputFormat *outputFormat;PinyinHelper::toHanyuPinyinStringArray(firstChar, outputFormat, &pinyinList); // 获取文件名对应的汉语拼音QString firstLetters; // 存储汉语拼音的首字母foreach(const QString& pinyin, pinyinList) {qDebug()<<"pinyin "<<pinyin<<endl;if (!pinyin.isEmpty() && pinyin.at(0).isLower()) {firstLetters += pinyin.at(0);qDebug()<<"firstLetters "<<firstLetters<<endl;if (fileName.contains(firstLetters, Qt::CaseInsensitive)){result->append(filePath);}break;}}

只匹配到第一个字母就返回中文的。

功能点六: 目录更新问题

0、知识点

  • QFileSystemWatch 监视文件目录
  • 变化后重新加载目录

1、实现步骤

2、功能实现

详细内容将更新在专栏中,有兴趣的小伙伴可以关注这个专栏 😄😄😄s

接下来测试一下:

当我们选定了需要监控的目录,在改目录下更新的所有操作都会被

目录监控

功能点七:其他

项目Ui优化

知识点:

  • qss的使用
  • 多线程机制
  • 运用设计模式对代码进行封装

简单地为每个目录创建多个线程,容易因为迭代深度太高二导致性能问题。 糟糕的设计方法

        QList<QFuture<void>> futures;foreach (const QString& dir, currentDir.entryList(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot)){SearchParam param;param.path = prefix + dir;param.fileName = fileName;futures.append(QtConcurrent::run(this, &MainWindow::searchDirectory, param, result));}QFutureSynchronizer<void> sync;sync.waitForFinished();

解决思路:用线程池进行管理。

详细内容将更新在专栏中,有兴趣的小伙伴可以关注这个专栏 😄😄😄

三、总结

​ 本文将对Qt文件查找系统进行技术总结。该系统包含了许多技术细节,包括文件管理器的打开、记忆下拉框内容、filetable的使用、文件信息显示、文件图标获取、自定义排序、QFileSystemWatch
监视文件目录、变化后重新加载目录、库的制作、qmake使用、makefile生成外部库后引入到项目中、Qt调用第三方库的方法、表格激活状态下选中右键、右键菜单、删除功能实现、启动文件、复制文件名以及检测剪切板、快捷键使用、快捷键冲突、窗口焦点捕获、托盘、系统消息设置、正则化表达式的书写、正则化表达式的应用、模糊匹配中按照顺序进行匹配、模糊匹配中遇到空格的处理、模糊匹配算法的优化、以及如何提高模糊查询的效率(QtConcurrent)。

  1. 其中,打开文件管理器进行目录选择是该系统的一个基础功能。通过使用记忆下拉框,系统可以记忆用户的历史输入,并且提供方便快捷的选项。filetable作为文件管理的核心组件,可以用于显示文件信息以及进行自定义排序。通过获取文件图标,系统可以使用户对文件进行更加直观的辨认。QFileSystemWatch
    可以帮助系统监视文件目录的变化,从而能够及时地更新文件列表。库的制作和使用是一个重要的话题,qmake和makefile是实现库制作和使用的关键工具。Qt调用第三方库的方法,可以帮助系统实现更加丰富的功能。
  2. 在文件查找系统中,右键菜单和删除功能的实现都是非常重要的。启动文件、复制文件名以及检测剪切板都是与用户体验密切相关的功能,快捷键的使用和冲突也需要特别关注。窗口焦点捕获和托盘是增强系统交互性的重要特性。系统消息设置和正则化表达式的应用可以提供更加个性化的设置。模糊匹配是文件查找系统中常见的查询方式,按照顺序进行匹配和遇到空格的处理都需要特别注意。同时,对于模糊匹配算法的优化以及如何提高模糊查询的效率也需要仔细思考。

四、讨论

这个项目仅仅是作为新手学习的时候的学习笔记,在实现的地方可能会存在一些不合理的地方,烦请大佬批评与指正,⭐️:⭐️ ⭐️

在实现文件系统时,总有些疑惑就是:Everything这种本地文件搜索器是如何这么快检索到需要的文件呢?

非常期待各位大佬留言解惑!

最后,最后
如果觉得有用,麻烦三连👍⭐️❤️支持一下呀,希望这篇文章可以帮到你,你的点赞是我持续更新的动力

相关文章:

Qt实践项目:仿Everything软件实现一个QtEverything

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…...

WEB网站服务(一)

1.1 Apache网站服务基础1.1.1Apache简介Apache HTTP Server是开源软件项目的杰出代表&#xff0c;基于标准的HTTP网络协议提供网页浏览服务。Apache服务器可以运行在Linux,UNIX&#xff0c;windows等多种操作系统平台中。1.Apache的起源1995年&#xff0c;Apache服务程序的1.0版…...

Python数据分析script必备知识(一)

Python数据分析script必备知识(一) 1.重定向终端输出内容 使生成的结果移动到其他位置 # 重定向, 使生成的结果移动到其他位置 import syssys.stderr = sys.stdoutprint(dir(sys)) # ,,,,,__stderr__, __stdin__, __stdout__,,,,,,# 使用场景:脚本上线时,想要把输出结果…...

初识linux之管道

一、进程间通信的概念大家都知道&#xff0c;进程是具有独立性的&#xff0c;因为一个程序运行起来生成进程时&#xff0c;也会生成它的进程结构体&#xff0c;即PCB&#xff0c;然后然后通过进程结构体中的结构体指针找到它的虚拟地址空间&#xff0c;然后再通过它的页表映射到…...

C++成神之路 | 第一课【步入C++的世界】

目录 一、认识C++ 1.1、关于 C++ 1.2、C++的前世今生 1.2.1、C+...

【面试题】大厂面试官:你做过什么有亮点的项目吗?

大厂面试题分享 面试题库前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库前言大厂面试中除了问常见的算法网络基础&#xff0c;和一些八股文手写体之外&#xff0c;经常出现的一个问题就是&#xff0c;你做过什么项目…...

Springboot Long类型数据太长返回给前端,精度丢失问题 复现、解决

前言 惯例&#xff0c;收到兄弟求救&#xff0c;关于long类型丢失精度的问题&#xff1a; 存在一个初学者不会&#xff0c;就会有第二个初学者不会&#xff0c;所以我出手。 正文 不多说&#xff0c;开搞。 如题&#xff0c; 后端返回的数据 给到 前端&#xff0c; Long类型数…...

Anaconda虚拟环境的创建方法(命令创建)

虚拟环境介绍&#xff1a; 虚拟环境是一为某个项目创建的专属于它的python包&#xff0c;因此做python项目时&#xff0c;一般一个项目用一个虚拟环境。在实际开发中&#xff0c;如果项目A需要某个包的1.0版本&#xff0c;项目B需要此包的2.0版本。如果没有安装虚拟环境&#…...

数据结构——树与二叉树

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月22日 内容&#xff1a;数据结构树与二叉树的讲解&#xff08;介绍&#xff09; 目录 前言&#xff1a; 1.树的概念&#xff1a; 2.树与非树&#xff1a; 3.树的定义&#xff1a; 4.树的应用&#xff1a; 二叉树&…...

vue后台管理系统

后面可参考下&#xff1a;vue系列&#xff08;三&#xff09;——手把手教你搭建一个vue3管理后台基础模板 以下代码项目gitee地址 文章目录1. 初始化前端项目初始化项目添加加载效果配置 vite.config.js2. 使用路由安装路由配置路由配置别名和跳转安装pathvite.config.jsjsco…...

spring boot 集成 postgis jar

要将 PostGIS 集成到 Spring Boot 应用程序中,需要按照以下步骤进行操作:1. 将 PostGIS JDBC 驱动程序添加到项目依赖项中。可以在 Maven 或 Gradle 中添加以下依赖项:Maven:```xml <dependency><groupId>org.postgresql</groupId><artifactId>pos…...

【Java进阶篇】——反射机制

一、反射的概念 1.1 反射出现的背景 Java程序中&#xff0c;所有对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致 Object obj new String("hello")、obj.getClass(); 如果某些变量或形参的声明类型…...

Oracle中含有recover 状态的数据文件环境中,做异机恢复

背景&#xff1a; 我们在一些恢复测试案例中&#xff0c;会经常遇到一些奇怪的问题&#xff0c;其中有的是源端数据文件不规范而导致恢复过程出错&#xff0c;比较常见的错误有&#xff1a; 数据文件名称重复&#xff08;如&#xff1a;/oradata1/user01.dbf 和 /oradata2/us…...

图像识别模型

一、数据准备 首先要做一些数据准备方面的工作&#xff1a;一是把数据集切分为训练集和验证集&#xff0c; 二是转换为tfrecord 格式。在data_prepare&#xff0f;文件夹中提供了会用到的数据集和代码。首先要将自己的数据集切分为训练集和验证集&#xff0c;训练集用于训练模型…...

[零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机

开箱先上图&#xff1a;配置详情&#xff1a;EQ12采用了Intel最新推出的N100系列的处理&#xff0c;超低的功耗&#xff0c;以及出色的CPU性能用来做软路由或者是All in one 相当不错&#xff0c;CPU带有主动散热风扇&#xff0c;在长期运行下散热完全不用担心&#xff0c;性价…...

MongoDB基础

优质博客 IT-BLOG-CN 一、简介 MongoDB是一个强大的分布式文件存储的NoSQL数据库&#xff0c;天然支持高可用、分布式和灵活设计。由C编写&#xff0c;运行稳定&#xff0c;性能高。为WEB应用提供可扩展的高性能数据存储解决方案。主要解决关系型数据库数据量大&#xff0c;并…...

【Linux】Linux基本指令(下)

前言&#xff1a; 紧接上期【Linux】基本指令&#xff08;上&#xff09;的学习&#xff0c;今天我们继续学习基本指令操作&#xff0c;深入探讨指令的基本知识。 目录 &#xff08;一&#xff09;常用指令 &#x1f449;more指令 &#x1f449;less指令&#xff08;重要&…...

基于uniapp+u-view开发小程序【技术点整理】

一、上传图片 1.实现效果&#xff1a; 2.具体代码&#xff1a; <template><view><view class"imgbox"><view>职业证书</view><!-- 上传图片 --><u-upload :fileList"fileList1" afterRead"afterRead"…...

投稿指南【NO.7】目标检测论文写作模板(初稿)

中文标题&#xff08;名词性短语&#xff0c;少于20字&#xff0c;尽量不使用外文缩写词&#xff09;张晓敏1&#xff0c;作者1,2***&#xff0c;作者2**&#xff0c;作者2*&#xff08;通信作者右上标*&#xff09;1中国科学院上海光学精密机械研究所空间激光传输与探测技术重…...

【绘图】比Matplotlib更强大:ProPlot

✅作者简介&#xff1a;在读博士&#xff0c;伪程序媛&#xff0c;人工智能领域学习者&#xff0c;深耕机器学习&#xff0c;交叉学科实践者&#xff0c;周更前沿文章解读&#xff0c;提供科研小工具&#xff0c;分享科研经验&#xff0c;欢迎交流&#xff01;&#x1f4cc;个人…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

C# WPF 左右布局实现学习笔记(1)

开发流程视频&#xff1a; https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码&#xff1a; GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用&#xff08;.NET Framework) 2.…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...