Qt:QDockWidget停靠时的选项卡图标

Qt: Tab Icon when QDockWidget becomes docked

Qt 的 QMainWindow 能够停靠从 QDockWidget 派生的 windows。如果堆叠的很少,它也会将一个放在另一个上面,从而产生一个标签栏。每当 QDockWidget 的状态发生变化时,就会发出信号 topLevelChanged()。此时我想访问底层 QTabWidget 来为新添加的选项卡设置图标。我该怎么做?我已经耐心地尝试从 Qt 的文档和源代码中找出答案。提前谢谢你。

所以我想在 Contents/Index 选项卡上显示图标。

一旦至少一个 dockwidget 被制表,main-window 将创建一个 QTabBar 来提供 dock-tabs。每个停靠区域都可以有自己的标签栏。这些标签栏将成为 main-window 的子项,因此您可以使用 findChildren() or children() 获取对它们的引用。

主要困难在于找到哪个停靠栏小部件属于哪个选项卡以及在哪个选项卡栏中。如果 dock-widget window-titles 都是唯一的,您可以使用 tabText(). Otherwise, you might be able to use the tabData() 进行搜索,Qt 在内部将其设置为来自 dock-widget 的 quintptr

有了正确的选项卡后,您当然可以使用 setTabIcon() 添加图标。但请注意,每次停靠小部件取消标签化或移动到另一个标签栏时,图标都会丢失。