1.先进行menu创建
auto recentMenu = new QMenu();
for(int i=0;i<MaxRecentFiles;i++)
{
recentFileActs[i] = new QAction(this);
recentFileActs[i]->setVisible(false);
recentMenu->addAction(recentFileActs[i]);
connect(recentFileActs[i], SIGNAL(triggered()),
this, SLOT(openRecentFile()));
}
ui->actionRecentFile->setMenu(recentMenu);
updateRecentFileActions();
void MainWindow::openRecentFile()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action)
{
_currentFile = action->data().toString();
onOpen(false);
}
}
2.更新显示的实现
void MainWindow::updateRecentFileActions()
{
QSettings settings( INI_NAME, QSettings::IniFormat);
QStringList files = settings.value("recentFileList",".").toStringList();
int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles);
for (int i = 0; i < numRecentFiles; ++i) {
QString text = tr("&%1 %2").arg(i + 1).arg((files[i]));
recentFileActs[i]->setText(text);
recentFileActs[i]->setData(files[i]);
recentFileActs[i]->setVisible(true);
}
for (int j = numRecentFiles; j < MaxRecentFiles; ++j)
recentFileActs[j]->setVisible(false);
ui->actionRecentFile->setVisible(numRecentFiles > 0);
}
3.更新当前文件实现
void MainWindow::SetCurrentFile(const QString &filePath)
{
QString filePathFinal =filePath;
_currentFile = filePathFinal;
QSettings settings( INI_NAME, QSettings::IniFormat);
QStringList files = settings.value("recentFileList").toStringList();
if(filePathFinal!="")
{
setWindowTitle(APP_VERSION+QString(" - ["+filePathFinal+"[*]]"));
files.removeAll(_currentFile);
files.prepend(_currentFile);
while (files.size() > MaxRecentFiles){
files.removeLast();
}
settings.setValue("recentFileList", files);
updateRecentFileActions();
}
else
{
setWindowTitle(QString( " - [New.flow[*]]"));
}
}