如何关闭所有选项卡但在 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)中处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

QT4:如何重启应用程序?重新设置? [复制]

使用 CSS 设计 QTabWidget 背景

NSWindow 在关闭 NSPopover 后失去了第一响应者

如何在android中以小写显示文本?

关闭浏览器或选项卡时如何获取 Web 通知

QTabBar中的Qt4扩展选项卡