QT开发中文网

Qt在mainwindow界面在右侧用stackwidget存放打开的界面,通过双击左侧的treeview节点在右侧打开显示,stackwidget存放的界面有tablewidget和treeview等等,怎么存放所有打开过的界面的历史记录,通过前进后退按钮进行控制呢

可以使用QStackedWidget的setCurrentIndex()方法来实现历史记录的前进后退。

具体步骤如下:

  1. 定义一个QStackedWidget成员变量,用于存放打开的界面。

  2. 在treeview节点双击事件中,判断当前节点对应的界面是否已经打开过,如果已经打开过则调用setCurrentIndex()方法显示该界面,否则新建一个界面并添加到QStackedWidget中。

  3. 定义一个QList成员变量,用于存放历史记录。在每次打开新界面时,将当前QStackedWidget的currentIndex()加入历史记录中,并更新前进后退按钮状态。

  4. 前进后退按钮的点击事件中,根据历史记录和当前QStackedWidget的currentIndex()设置新的currentIndex(),并更新前进后退按钮状态。

以下是示例代码:

// 声明 QStackedWidget 对象 QStackedWidget *stackedWidget = new QStackedWidget(this);

// 声明历史记录 QList history;

// 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);

}

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?