Qt 实现最近打开文档功能

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[*]]"));

    }

}

参考文章Recent Files Example | Qt 4.8

您好!感谢您的提问。下面是用QML实现最近打开文件功能的一种方式。 首先,在QML中创建一个ListView来显示最近打开文件列表,代码如下: ``` ListView { id: recentFilesList model: recentFilesModel delegate: Rectangle { width: parent.width height: 30 color: index % 2 === 0 ? "#f2f2f2" : "#ffffff" Text { text: fileName anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left leftPadding: 10 } MouseArea { anchors.fill: parent onClicked: { openFile(fileName) } } } } ``` 其中,recentFilesModel是一个ListModel,用于存储最近打开文件路径和文件名。delegate是用来定义每一项的显示样式和点击事件的。这里我们使用一个矩形来实现每一项,包括一个文本标签用于显示文件名,以及一个鼠标区域用于响应点击事件。 然后,在QML中定义一个JavaScript函数openFile,用于打开选中的文件,代码如下: ``` function openFile(fileName) { // 打开文件的逻辑代码 } ``` 这里的代码需要根据具体的需求来实现打开文件的逻辑,例如使用Qt中的QFile和QTextStream类来读取文件内容。 最后,在QML中添加一个按钮或者菜单项,用于触发打开最近文件列表的操作,代码如下: ``` Button { text: "最近打开文件" onClicked: { showRecentFilesList() } } function showRecentFilesList() { // 显示最近打开文件列表的逻辑代码 } ``` 这里的代码需要根据具体的需求来实现显示最近文件列表的逻辑,例如使用Qt中的QDialog类来实现一个对话框来显示最近文件列表。 以上就是用QML实现最近打开文件功能的一种方式。希望能对您有所帮助。如果您有任何问题,请随时追问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢娘蓝桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值