隐藏Qt标签页的标签文本,而不设置为空字符串

5
我需要一个仅显示图标的 QTabWidget
如何隐藏 Qt 中选项卡的标签文本?我不能将文本设置为空字符串(""),因为我正在使用停靠小部件(QDockWidget),并且标签文本会自动设置(如果小部件正在浮动,则我需要它)。
但在选项卡模式下,我只想显示选项卡的图标。 可能的方法:
1. 字体大小设置为 0? 2. 我需要创建自己的栏类,并重写 paint 事件,如这里 是否有更简单/更清晰的方法?
--- 编辑 ---
好吧,“将窗口标题设置为空字符串,然后将其重置为原始文本”的方法可行。我正在使用 topLevelChanged 信号进行此操作。但是,它有一些缺点,因为空白文本仍然占用一些空间。另一个问题是,去掉了文本后,工具提示也消失了,我无法将其恢复。 Still some space consumed 当下我正在尝试的是介于“文本为空”和 Prasad Silva 方法之间的东西。我尝试识别选项卡内的文本标签并将其大小设置为 0,然后重置它。它略有不同,但会保持文本不变。
顺便说一下,我看到我的选项卡上方有一条线,你知道这是什么(它来自哪里)吗? 编辑:似乎没有“易于”的方法(样式表、属性)可以做到这点,请参见“隐藏 QTabBar 中的底部线”
也许我将完全自己创建整个选项卡栏,因为自动生成的内容太难处理了(同意 PS 的观点)。

当使用addTab时,为什么不能将字符串留空? - László Papp
因为在使用QDockWidget时,选项卡栏是自动生成的,并且标签文本也在同一步骤中自动设置。https://qt-project.org/doc/qt-5.3/qtabwidget.html - Horst Walter
如果您不想看到文本,为什么不能将文本设置为空,当您想要查看时再将其设置回来呢?我认为API中没有针对这种不太常见的情况的任何内容。您自己无法清除和设置吗? - László Papp
是的,我可能可以。但是对于许多小部件来说,这很繁琐,我正在寻找更简单的解决方案。但这可能是我的唯一机会。 - Horst Walter
3个回答

3
这并不容易实现。使用空文本即可。

与上述问题相同,问题在于我无法将文本设置为空,因为它不在我的控制范围内。当使用选项卡式 QDockWidgets 时,文本会根据相应的 QDockWidget 的标题自动设置。如果我将其设置为空,则在小部件浮动时没有文本。我可以在 topLevelChanged 插槽中设置/重置文本,但是对于多个 QDockWidgets 来说这变得很繁琐。 - Horst Walter

3

我解决这种问题的方式是创建一个QDockWidget子类,通过setTitleBarWidget方法将QWidget子类安装为标题栏。这使我能够控制在dockwidget触发topLevelChanged、dockLocationChanged和visiblityChanged时显示/隐藏标题栏中的文本。

这实际上是一个大型的hack,以绕过Qt拒绝公开对停靠系统的API。由于这些限制,我们已经转向自定义停靠实现。


这确实是一个巨大的黑客行为,甚至比来回更改字符串还要糟糕。请不要这样做。 - László Papp

1
如果您不想看到文本,保存当前文本后将其设置为空文本,当您想再次查看时,请从存储的变量中恢复它。
我认为 API 中没有针对这种不太常见情况的任何内容,这意味着您需要自己完成。
现在,您可以声称对许多小部件来说这很繁琐,但另一方面,您可以编写一个简单的哈希定义或内联函数来为您执行这些重复工作,这只会导致一个一行调用,基本上当您更改状态时必须使用它。

然而,使用上述方法也存在一些缺点 - 如上所述。 - Horst Walter

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