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