C++ 如何关闭Qt4(QTabWidget)中处于活动状态的所有选项卡

C++ 如何关闭Qt4(QTabWidget)中处于活动状态的所有选项卡,c++,c,qt,qt4,C++,C,Qt,Qt4,当我知道活动选项卡索引和选项卡计数时,如何关闭除QTabWidget中的活动选项卡以外的所有选项卡? 关闭所有页签的功能是tabwidget->clear()您试过这个吗 // remove all tabs after current for (int i = tabWidget.count() - 1; i > tabWidget.currentIndex(); --i) { tabWidget.removeTab(i); } // current tab is now the

当我知道活动选项卡索引和选项卡计数时,如何关闭除QTabWidget中的活动选项卡以外的所有选项卡? 关闭所有页签的功能是
tabwidget->clear()

您试过这个吗

// remove all tabs after current
for (int i = tabWidget.count() - 1; i > tabWidget.currentIndex(); --i) {
   tabWidget.removeTab(i);
}

// current tab is now the last, therefore remove all but the last
for (int i = tabWidget.count(); i > 1; --i) {
   tabWidget.removeTab(0);
}

工作解决方案,该类来自继承QTabWidget的类:

void closeOtherTabsRequested(int index)
{
    auto selectedWidget = widget(index);
    auto tabCount = mTabBar->count();
    for(auto i = tabCount - 1; i >= 0; i--) {
        auto currentWidget = widget(i);
        if(currentWidget != selectedWidget) {
            tabCloseRequested(i);
        }
    }
}

这可能会发生故障,因为每次删除排名低于
currentIndex
的选项卡时,此索引以及
count
都会发生更改。您最好从后面开始,删除当前索引上的所有选项卡。然后你转到开头,删除除最后一个以外的所有标签。在你的代码之前,mauve和我有相同的错误。您的固定代码有一个小错误:for(int i=ui->tabWidget->count()-1;i>ui->tabWidget->currentIndex();--i){ui->tabWidget->removeTab(i);}//当前选项卡现在是最后一个,因此除去(int i=ui->tabWidget->count()/*-1*/;i>1;--i){ui->tabWidget->removeTab(0);}此代码工作正常。但非常感谢你的紫红色和rpsml:)