QTabWidget:关闭选项卡按钮无法使用

18

我已经设置了ui->tabWidget->setTabsClosable(true);,但QTabwidget只在每个选项卡上显示一个“叉号”按钮,点击此按钮无法关闭该选项卡。我还需要做什么才能使选项卡可关闭?我尝试连接任何适合此工作的槽(slot)到信号tabCloseRequested(int),但在选项卡窗口部件中找不到这样的槽。请建议正确的方法。

4个回答

29
创建一个插槽,例如closeMyTab(int),并将标签小部件的tabCloseRequested(int)信号连接到此插槽。在此插槽中,使用从信号接收的索引调用标签小部件的removeTab方法。
更多细节请参见此答案

9

如果未来遇到此问题并寻求PyQt5解决方案,这可以简化为一行代码:

tabs = QTabWidget()
tabs.tabCloseRequested.connect(lambda index: tabs.removeTab(index))

tabCloseRequested 信号会发射一个整数,等于发出信号的标签页的索引,因此你只需将其连接到一个以该索引为参数的 lambda 函数。

唯一可能出现的问题是,将 lambda 函数连接到槽会防止在删除选项卡时对象被垃圾回收(参见此处)。

编辑(2021 年 9 月 7 日):由于 QTabWidget.removeTab 默认接受一个整数索引作为其唯一参数,因此实际上不需要 lambda 函数,因此以下代码足以满足需求(并避免垃圾回收问题):

tabs.tabCloseRequested.connect(tabs.removeTab)

7

自Qt 5引入新的连接语法以来,最好的实践方法是:

QTabWidget* tabWidet = new QTabWidget();
connect(tabWidget->tabBar(), &QTabBar::tabCloseRequested, tabWidget->tabBar(), &QTabBar::removeTab);

2
确实在Qt5上表现非常出色。推荐使用这个解决方案。 - Turtle10000

4
您只需要告诉tabWidget本身关闭请求的选项卡索引(传递给插槽的参数)即可,如下所示:
ui->tabWidget->removeTab(index);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接