【问题标题】:Qt: Tab Icon when QDockWidget becomes dockedQt:QDockWidget停靠时的选项卡图标
【发布时间】:2018-03-18 16:45:49
【问题描述】:

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

所以我想在内容/索引选项卡上显示图标。

【问题讨论】:

  • 很难想象。你能发布一些用户界面吗
  • qTabWidget->setStyleSheet("QTabBar::tab,QTabBar::tab:selected {background-image : url(:path);}");
  • qTabWidget ?首先,我必须以某种方式得到它......

标签: qt icons tabbar qdockwidget


【解决方案1】:

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

主要困难在于找到哪个停靠小部件属于哪个选项卡以及哪个选项卡栏。如果dock-widget 窗口标题都是唯一的,您可以使用tabText() 进行搜索。否则,您也许可以使用 tabData(),Qt 在内部设置为来自 dock-widget 的 quintptr

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

【讨论】:

  • 它有效,但还有另一个外观问题。如果有一个停靠的小部件并且我将另一个小部件拖到它上面(但还没有放下),Qt 动画就会生效,此时会创建一个标签栏(带有一个标签)。并且单个选项卡没有图标。当我放下时,只有第二个选项卡有一个图标。也许 topLevelChanged() 信号对此不利。钩住标签栏创建过程会很好
  • @def。也许您可以覆盖主窗口 event() 并观察 child events 以查看何时添加标签栏。
  • 没问题,我只是在初始化期间和每次停靠布局发生变化时遍历所有标签栏。
  • @def。那么现在一切正常吗?如果是这样,如果您接受我的回答,我将不胜感激(假设您觉得它有用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
相关资源
最近更新 更多