代码实现如下:
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);
}
在按下键盘的“前进”和“后退”按钮时,分别调用 goBack
和 goForward
方法。在每次页面切换时,发出页面切换信号,例如:
void MyWidget::onPageChanged(QString page)
{
// 更新界面...
}
// 连接页面切换信号
connect(widget, &MyWidget::pageChanged, this, &MyMainWindow::onPageChanged);
在关闭文件时,清空历史记录,例如:
void MyWidget::closeFile()
{
// 关闭文件,清空内容
// 清空历史记录
m_history.clear();
// 更新前进和后退按钮状态
updateButtonsState();
}