可以使用QStackedWidget的setCurrentIndex()方法来实现历史记录的前进后退。
具体步骤如下:
定义一个QStackedWidget成员变量,用于存放打开的界面。
在treeview节点双击事件中,判断当前节点对应的界面是否已经打开过,如果已经打开过则调用setCurrentIndex()方法显示该界面,否则新建一个界面并添加到QStackedWidget中。
定义一个QList
成员变量,用于存放历史记录。在每次打开新界面时,将当前QStackedWidget的currentIndex()加入历史记录中,并更新前进后退按钮状态。 前进后退按钮的点击事件中,根据历史记录和当前QStackedWidget的currentIndex()设置新的currentIndex(),并更新前进后退按钮状态。
以下是示例代码:
// 声明 QStackedWidget 对象 QStackedWidget *stackedWidget = new QStackedWidget(this);
// 声明历史记录
QList
// treeview 节点双击事件 void MainWindow::onTreeViewDoubleClicked(const QModelIndex &index) {
// 获取节点对应的界面名称
QString pageName = getPageName(index);
// 判断界面是否已经打开过
int pageIndex = -1;
for (int i = 0; i < stackedWidget->count(); i++) {
if (stackedWidget->widget(i)->objectName() == pageName) {
pageIndex = i;
break;
}
}
// 如果界面已经打开过,则显示该界面,否则新建一个界面并添加到 stackedWidget 中
if (pageIndex != -1) {
stackedWidget->setCurrentIndex(pageIndex);
} else {
QWidget *widget = createPage(pageName);
stackedWidget->addWidget(widget);
pageIndex = stackedWidget->count() - 1;
}
// 将当前界面的索引加入历史记录
history.append(stackedWidget->currentIndex());
// 更新前进后退按钮状态
updateButtonStatus();
}
// 前进按钮点击事件 void MainWindow::onForwardButtonClicked() {
// 获取下一个界面的索引
int index = getNextIndex(true);
// 设置新的 currentIndex
stackedWidget->setCurrentIndex(index);
// 更新前进后退按钮状态
updateButtonStatus();
}
// 后退按钮点击事件 void MainWindow::onBackwardButtonClicked() {
// 获取上一个界面的索引
int index = getNextIndex(false);
// 设置新的 currentIndex
stackedWidget->setCurrentIndex(index);
// 更新前进后退按钮状态
updateButtonStatus();
}
// 获取下一个界面的索引 int MainWindow::getNextIndex(bool forward) {
int index = stackedWidget->currentIndex();
if (forward) {
index++;
if (index > history.count() - 1) {
index = history.count() - 1;
}
} else {
index--;
if (index < 0) {
index = 0;
}
}
return history.at(index);
}
// 更新前进后退按钮状态 void MainWindow::updateButtonStatus() {
ui->backwardButton->setEnabled(stackedWidget->currentIndex() > 0);
ui->forwardButton->setEnabled(stackedWidget->currentIndex() < stackedWidget->count() - 1);
}