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日

相关文章

  • java实现基于UDP协议网络Socket编程(C/S通信)

    下面是“java实现基于UDP协议网络Socket编程(C/S通信)”的完整攻略。 一、UDP协议 UDP(User Datagram Protocol,用户数据报协议)是一种无状态的、轻量级的传输协议,与TCP相比,不保证可靠的传输(不提供丢包重传、状态协商等功能),但具有实时性好、开销小、网络负担小等优点。在网络游戏、实时音视频、实时监控等方面广泛应用。…

    other 2023年6月27日
    00
  • 怎样在局域网中绑定电脑的ip地址

    怎样在局域网中绑定电脑的IP地址 在局域网中,绑定电脑的IP地址可以帮助确保网络连接的稳定性和安全性。下面是一个完整的攻略,详细介绍了如何在局域网中绑定电脑的IP地址。 步骤一:打开网络设置 首先,打开电脑的网络设置。在Windows操作系统中,可以通过以下步骤打开网络设置: 点击任务栏右下角的网络图标。 在弹出的菜单中,选择“网络和Internet设置”。…

    other 2023年7月29日
    00
  • NET USER 命令详解(dos下添加用户)

    NET USER 命令详解(dos下添加用户) 在 Windows 系统中,通过命令行可以添加、删除、修改用户,其中 NET USER 是修改本地用户的命令。 命令格式 NET USER [username [password | *] [options]] [/DOMAIN] NET USER [username { password | *} /ADD …

    other 2023年6月27日
    00
  • java之label详解

    Java之label详解 在Java中,label是一种标识符,可以用来标识代码块。通过label,我们可以在嵌套的循环或者switch语句中,跳出指定的循或者switch语句。本文将详细介绍Java中label的使用方法和注意事项。 label的语法 label的语法格式如下“`javalabelName: statement 其中,labelName是…

    other 2023年5月7日
    00
  • java8stream.iterate示例

    Java 8 Stream.iterate示例攻略 在Java 8中,Stream.iterate()方法是一个用于创建无限流的方法。它接受一个初始值和一个函数,该函数用于生成下一个值。在攻略中,我们将详介绍如何使用Stream.iterate(),并提供两个示例说明。 Stream.iterate的使用 要使用Stream.iterate()方法,我们提供…

    other 2023年5月7日
    00
  • IDEA的Maxcomputer Studio开发

    IDEA的Maxcomputer Studio开发 Maxcomputer Studio是一个基于IDEA(IntelliJ IDEA)IDE(Integrated Development Environment)开发的工具套件,可以用于广泛的软件开发,如Java、Kotlin、Groovy、Scala、Android等领域的应用程序开发。 关于Intell…

    其他 2023年3月28日
    00
  • C语言中结构体(struct)的几种初始化方法

    以下是C语言中结构体(struct)的几种初始化方法的详细讲解。 一、结构体概述 结构体是C语言中一种用户定义类型,允许用户将不同的数据类型组合在一起,形成一个自定义的类型。结构体可以包含不同类型的数据,如整型、浮点型、字符型、数组和其他结构体等。在C语言中,可以使用struct关键字来定义结构体。 结构体定义可以写在函数内部,也可以写在函数外部。定义在函数…

    other 2023年6月20日
    00
  • qq撤回消息并抱了你一下怎么弄 qq撤回消息后特别后缀设置教程

    QQ撤回消息并抱了你一下的完整攻略 1. 设置QQ撤回消息特殊后缀 首先,我们需要设置QQ撤回消息的特殊后缀,以便在撤回消息后进行一些特殊操作,比如抱抱你一下。请按照以下步骤进行设置: 打开QQ应用并登录你的账号。 点击右上角的设置按钮,进入设置界面。 在设置界面中,找到消息设置选项,并点击进入。 在消息设置中,找到撤回消息设置,并点击进入。 在撤回消息设置…

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