18

我已设置ui->tabWidget->setTabsClosable(true);QTabwidget仅在每个选项卡上显示一个十字,单击此按钮时未关闭选项卡。我还需要做什么才能使标签可关闭?我试图连接任何接近信号的插槽(适合这项工作),tabCloseRequested(int)但在 tabwidget 中找不到任何这样的插槽。请提出正确的方法。

4

4 回答 4

28

例如,创建一个插槽closeMyTab(int)并将选项卡小部件的tabCloseRequested(int)信号连接到此插槽。在此插槽调用选项卡小部件的removeTab方法中,使用从信号接收到的索引。

有关更多详细信息,请参阅此答案

于 2013-10-03T05:29:33.000 回答
6

自从我们有了新的连接语法(Qt 5)以来,最好的方法是:

QTabWidget* tabWidet = new QTabWidget();
connect(tabWidget->tabBar(), &QTabBar::tabCloseRequested, tabWidget->tabBar(), &QTabBar::removeTab);
于 2020-08-20T12:39:08.047 回答
6

对于未来在这个问题上寻找 PyQt5 解决方案的人来说,这可以浓缩成一个 1-liner:

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

tabClos​​eRequested 信号发出一个整数,该整数等于发出它的选项卡的索引,因此您可以将它连接到一个以索引作为参数的 lambda 函数。

我可以看到的唯一问题是将 lambda 函数连接到插槽可防止对象在删除选项卡时收集垃圾(请参见此处)。

编辑(21 年 9 月 7 日):实际上不需要 lambda 函数,因为 QTabWidget.removeTab 默认将整数索引作为其唯一参数,因此以下内容就足够了(并避免了垃圾收集问题):

tabs.tabCloseRequested.connect(tabs.removeTab)
于 2020-02-18T00:38:29.697 回答
4

您只需要告诉tabWidget自己关闭请求的选项卡索引(传递给插槽的参数),如下所示:

ui->tabWidget->removeTab(index);
于 2015-04-17T16:37:57.543 回答