QT开发中文网

Qt 只存储当前打开文件的历史页面,最多存20页,通过按下键盘的“前进”和“后退”按钮来实现界面的前进和返回、多次前进和多次返回功能,关闭文件后清空所有记录C++

代码实现如下:

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr)
        : QWidget(parent)
    {
        // 设置历史记录最大数量
        m_history.setMaximumSize(20);

        // 创建前进和后退按钮
        m_backButton = new QPushButton("Back", this);
        m_forwardButton = new QPushButton("Forward", this);

        // 连接按钮的 clicked 信号,实现前进和后退功能
        connect(m_backButton, &QPushButton::clicked, this, &MyWidget::goBack);
        connect(m_forwardButton, &QPushButton::clicked, this, &MyWidget::goForward);

        // 创建布局并添加控件
        QHBoxLayout *layout = new QHBoxLayout(this);
        layout->addWidget(m_backButton);
        layout->addWidget(m_forwardButton);
    }

public slots:
    // 添加页面到历史记录
    void addPageToHistory(QString page)
    {
        // 如果当前页面与上一个页面相同,则不添加到历史记录
        if (!m_history.isEmpty() && m_history.last() == page) {
            return;
        }

        // 添加页面到历史记录
        m_history.append(page);

        // 更新前进和后退按钮状态
        updateButtonsState();
    }

    // 前进到上一个页面
    void goBack()
    {
        // 如果历史记录为空,则无法前进
        if (m_history.isEmpty()) {
            return;
        }

        // 取出上一个页面并移除它
        QString lastPage = m_history.takeLast();

        // 发送页面切换信号
        emit pageChanged(lastPage);

        // 更新前进和后退按钮状态
        updateButtonsState();
    }

    // 前进到下一个页面
    void goForward()
    {
        // 如果历史记录为空,则无法前进
        if (m_history.isEmpty()) {
            return;
        }

        // 取出下一个页面并移除它
        QString nextPage = m_history.takeFirst();

        // 发送页面切换信号
        emit pageChanged(nextPage);

        // 更新前进和后退按钮状态
        updateButtonsState();
    }

signals:
    // 页面切换信号
    void pageChanged(QString page);

private:
    // 当前打开文件的历史页面
    QList<QString> m_history;

    // 前进和后退按钮
    QPushButton *m_backButton;
    QPushButton *m_forwardButton;

    // 更新前进和后退按钮状态
    void updateButtonsState()
    {
        m_backButton->setEnabled(!m_history.isEmpty());
        m_forwardButton->setEnabled(!m_history.isEmpty());
    }
};

在打开文件时,调用 addPageToHistory 方法添加页面到历史记录中,例如:

void MyWidget::openFile(QString fileName)
{
    // 打开文件,显示内容
    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QString content = file.readAll();
        // 显示内容...
    }

    // 添加页面到历史记录
    addPageToHistory(fileName);
}

在按下键盘的“前进”和“后退”按钮时,分别调用 goBackgoForward 方法。在每次页面切换时,发出页面切换信号,例如:

void MyWidget::onPageChanged(QString page)
{
    // 更新界面...
}

// 连接页面切换信号
connect(widget, &MyWidget::pageChanged, this, &MyMainWindow::onPageChanged);

在关闭文件时,清空历史记录,例如:

void MyWidget::closeFile()
{
    // 关闭文件,清空内容

    // 清空历史记录
    m_history.clear();

    // 更新前进和后退按钮状态
    updateButtonsState();
}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=817

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?