如何关闭所有选项卡但在 Qt4(QTabWidget)中处于活动状态
Posted
技术标签:
【中文标题】如何关闭所有选项卡但在 Qt4(QTabWidget)中处于活动状态【英文标题】:How to close all tabs but active in Qt4(QTabWidget) 【发布时间】:2012-10-14 16:40:59 【问题描述】:当我知道活动选项卡索引和选项卡计数时,如何关闭所有选项卡但在QTabWidget
中处于活动状态?
关闭所有标签的功能是tabwidget->clear();
【问题讨论】:
【参考方案1】:你试过了吗?
// 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);
【讨论】:
这可能会发生故障,因为每次您删除排名低于currentIndex
的标签时,此索引以及count
都会发生变化。你最好的选择是从后面开始,删除currentIndex
上方的所有标签。然后你转到开头并删除除最后一个以外的所有选项卡。
在你的代码淡紫色之前有和我一样的错误。您的固定代码有一个小错误: for (int i = ui->tabWidget->count() - 1; i > ui->tabWidget->currentIndex(); --i) ui->tabWidget->removeTab(一世); // 当前选项卡现在是最后一个选项卡,因此删除除最后一个选项卡之外的所有选项卡 for (int i = ui->tabWidget->count()/* - 1*/; i > 1; --i) ui->tabWidget ->删除标签(0);这段代码可以正常工作。但是非常感谢你 mauve 和 rpsml :)【参考方案2】:
工作解决方案,这个来自的类继承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);
【讨论】:
以上是关于如何关闭所有选项卡但在 Qt4(QTabWidget)中处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章