我已经设置了ui->tabWidget->setTabsClosable(true);
,但QTabwidget
只在每个选项卡上显示一个“叉号”按钮,点击此按钮无法关闭该选项卡。我还需要做什么才能使选项卡可关闭?我尝试连接任何适合此工作的槽(slot)到信号tabCloseRequested(int)
,但在选项卡窗口部件中找不到这样的槽。请建议正确的方法。
我已经设置了ui->tabWidget->setTabsClosable(true);
,但QTabwidget
只在每个选项卡上显示一个“叉号”按钮,点击此按钮无法关闭该选项卡。我还需要做什么才能使选项卡可关闭?我尝试连接任何适合此工作的槽(slot)到信号tabCloseRequested(int)
,但在选项卡窗口部件中找不到这样的槽。请建议正确的方法。
closeMyTab(int)
,并将标签小部件的tabCloseRequested(int)
信号连接到此插槽。在此插槽中,使用从信号接收的索引调用标签小部件的removeTab
方法。如果未来遇到此问题并寻求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)
自Qt 5引入新的连接语法以来,最好的实践方法是:
QTabWidget* tabWidet = new QTabWidget();
connect(tabWidget->tabBar(), &QTabBar::tabCloseRequested, tabWidget->tabBar(), &QTabBar::removeTab);
tabWidget
本身关闭请求的选项卡索引(传递给插槽的参数)即可,如下所示:ui->tabWidget->removeTab(index);