QT实战之打开最近文档功能的实现

当我们在使用软件过程中,需要频繁地打开一些文档文件,对于经常使用的那些文档,我们有时候需要一种快捷的方式来定位和打开它们,这时候一个最近文档的列表就非常有用了。

在QT中实现最近文档功能其实非常简单,我们可以通过QSettings和QListWidget配合来实现这一功能。

1.首先我们需要在QT的菜单栏中添加最近文档的选项,例如添加一个“最近打开”的下拉菜单项,并在其下拉菜单中添加对应的“清空列表”和“打开”两个选项。

// 添加菜单项
QAction* openFileAction = new QAction(tr("打开"), this);
QAction* clearRecentAction = new QAction(tr("清空列表"), this);

recentMoviesMenu = new QMenu(tr("最近打开"), this);
recentMoviesMenu->addAction(openFileAction);
recentMoviesMenu->addAction(clearRecentAction);

ui->menuBar->addMenu(recentMoviesMenu);

2.当用户打开一个文件时,我们需要将该文件信息存储到QSettings中。例如存储文件路径和最近打开的时间戳等信息。

// 存储最近打开的文档
QSettings settings("MySoft","MyApp");// 创建一个QSettings对象
settings.setValue(tr("/recentMovieListNum"),recentMovieList.count());// 存储最近打开的文件数量
settings.setValue(tr("/recentMovieList"),"");//清空存储
for(int i=0;i<recentMovieList.count();i++){
    settings.setValue(QString("/recentMovieList/m%1").arg(i),QString("%1,%2").arg(recentMovieList.at(i)->moviePath).arg(recentMovieList.at(i)->openTime.toString("yyyy-MM-dd hh:mm:ss")));
}

3.当用户点击“最近打开”菜单项时,我们需要获取QSettings中存储的文件列表,然后将这些文件显示在QListWidget中。

// 获取最近打开的文档
QSettings settings("MySoft","MyApp");// 创建一个QSettings对象
int num=settings.value(tr("/recentMovieListNum"),0).toInt();
for(int i=num-1;i>=0;i--){
    QString path=settings.value(QString("/recentMovieList/m%1").arg(i)).toString();
    QStringList info=path.split(",");
    MovieStruct* movieStruct=new MovieStruct;
    movieStruct->moviePath=info.at(0);
    movieStruct->openTime=QDateTime::fromString(info.at(1),"yyyy-MM-dd hh:mm:ss");
    recentMovieList<<movieStruct;
    QListWidgetItem* item=new QListWidgetItem(QIcon(":/icons/movie.png"),QString("%1\n%2").arg(QFileInfo(movieStruct->moviePath).fileName()).arg(movieStruct->openTime.toString("yyyy-MM-dd hh:mm:ss")));
    ui->recentListWidget->addItem(item);
}

示例1:将最近打开的文档列表保存在文件中,以便在下次打开软件时可以加载最近打开的文档列表。

// 存储最近打开的文档到文件
QString fileName="recentFiles.txt";
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
    return;

QTextStream out(&file);
for(int i=0;i<recentMovieList.count();i++){
    out<<recentMovieList.at(i)->moviePath<<","<<recentMovieList.at(i)->openTime.toString("yyyy-MM-dd hh:mm:ss")<<"\n";
}
file.close();

示例2:将最近打开的文档列表显示在弹出式列表中,以方便用户选择最近打开的文档文件。

// 显示最近打开的文档列表在弹出式列表中
QPushButton* recentButton=new QPushButton(tr("最近打开"),this);
QListWidget* recentListWidget=new QListWidget(this);
QVBoxLayout* layout=new QVBoxLayout;
layout->addWidget(recentButton);
layout->addWidget(recentListWidget);
QDialog* dialog=new QDialog(this);
dialog->setLayout(layout);
dialog->setWindowTitle(tr("最近打开的文档"));
dialog->resize(300,200);

connect(recentButton,&QPushButton::clicked,this,[=](){
    dialog->exec();
});

for(int i=0;i<recentMovieList.count();i++){
    QListWidgetItem* item=new QListWidgetItem(QIcon(":/icons/movie.png"),QString("%1\n%2").arg(QFileInfo(recentMovieList.at(i)->moviePath).fileName()).arg(recentMovieList.at(i)->openTime.toString("yyyy-MM-dd hh:mm:ss")));
    recentListWidget->addItem(item);

    connect(item,&QListWidgetItem::doubleClicked,this,[=](){
        QDesktopServices::openUrl(QUrl::fromLocalFile(recentMovieList.at(i)->moviePath));
        dialog->close();
    });
}

以上就是实现最近文档功能的完整攻略,通过QSettings和QListWidget的使用,我们可以轻松地实现最近文档列表的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:QT实战之打开最近文档功能的实现 - Python技术站

(1)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • cue是什么意思?

    Cue是一种文本文件格式,用于描述多媒体作品中的场景、段落、字幕等元素的时间轴信息。它可以被用作音频和视频制作的脚本文件,并且是一个非常流行的文件格式,尤其在音乐和影视制作领域。 段落和注释 一个cue文件通常由一个或多个段落(通过空行分隔开来)组成,每个段落包含一条指令和一些参数。指令和参数之间使用空格进行分隔。注释可以使用“REM”指令或在“TITLE”…

    其他 2023年4月16日
    00
  • stringbuffer清空

    当然,我很乐意为您提供有关“StringBuffer清空”的完整攻略。以下是详细的步骤和两个示例: 1. StringBuffer清空 在Java中,StringBuffer是一个可变的字符串,可以用于动态构建字符串。有时,我们需要清空StringBuffer中的内容,以便重新使用它。以下是如何清空StringBuffer的方法。 2. StringBuff…

    other 2023年5月6日
    00
  • 如何设置双路由器 双路由器的设置方法

    设置双路由器的步骤如下: 1. 确定主路由器和次级路由器 首先,需要确定哪台路由器是主路由器,哪台是次级路由器。主路由器连接网络,次级路由器接收其网路信号。其次,还要确定主路由器和次级路由器的网络地址,以便更便捷地配置双路由器。 2. 连接次级路由器 将次级路由器通过LAN口连接到主路由器,且不要使用次级路由器的WAN口。此时,次级路由器接收到的是主路由器的…

    other 2023年6月27日
    00
  • css用css3新特性text-shadow制作艺术字效果

    以下是关于“CSS用CSS3新特性text-shadow制作艺术字效果”的完整攻略,包含两个示例。 CSS用CSS3新特性text-shadow制作艺术字效果 text-shadow是CSS3中的一个新特性,可以用于制作艺术字效果。以下是关于如何使用text-shadow制作艺术字效果的详细攻略。 1. 使用text-shadow制作阴影效果 使用text-…

    other 2023年5月9日
    00
  • 小米5s有哪些优缺点汇总 小米5s性价比怎么样

    以下是对小米5s的优缺点以及性价比的详细分析: 优点: 性能强大:小米5s搭载了高性能的骁龙821处理器和适当的内存配置,能够提供出色的性能表现。 摄影能力:小米5s配备了一颗1200万像素的索尼IMX378传感器,具有较高的拍照质量和细节表现能力。 指纹识别:小米5s采用了前置指纹识别技术,能够快速准确地解锁手机,并支持指纹支付等功能。 设计精美:小米5s…

    other 2023年10月17日
    00
  • latex使用markdown

    LaTeX使用Markdown LaTeX和Markdown都是文本编辑器,但它们的设计目标和应用场景有所不同。Markdown更加注重轻量级和易用性,用于快速、便捷地书写和分享文本;而LaTeX则致力于高质量的排版,适用于科学、技术和学术领域的论文、书籍和报告等文档。然而,通过Markdown可以轻松地写出LaTeX表达式,从而将Markdown和LaTe…

    其他 2023年3月28日
    00
  • Python面向对象原理与基础语法详解

    Python面向对象原理与基础语法详解 1. 引言 面向对象编程(Object-Oriented Programming,OOP)是一种常用的程序设计思想,Python作为一门面向对象编程语言,也提供了丰富的面向对象的特性和语法。本文将详细讲解Python中的面向对象原理和基础语法,帮助读者理解和运用面向对象编程的概念和技巧。 2. 面向对象原理 面向对象编…

    other 2023年6月28日
    00
  • docker mysql启动时执行初始化sql

    想要在docker中启动MySQL时自动执行初始化sql文件,可以通过以下步骤来实现: 1. 创建一个目录用于存放初始化文件 我们首先需要创建一个目录,用于存放我们的初始化sql脚本文件。 $ mkdir db_init_sql 2. 编写初始化sql脚本文件 在创建的目录下,我们需要创建一个或多个初始化sql脚本文件。这些sql文件包含了我们要在MySQL…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部