使用多种颜色为 macOS 中的标题栏着色

Colorizing the titlebar in macOS with multiple colors

我有一个在 macOS 上运行的 Qt 应用程序。我找到了一种更改标题栏颜色的方法 here,但我想更进一步。我想模仿 Slack 和 Discord 应用程序使用的标题栏。例如:

如您所见,window 中控件的颜色延伸到应用 window 的最顶部。我认为有两种方法可以完成我想要的:

  1. 我可以在上面粘贴的代码的基础上构建。查看一些 Apple 开发人员文档,我想我可以在标题栏顶部创建几个 NsWindows,无论我想要什么宽度,并将标题栏附加为 parent 那些 windows .一旦我这样做了,我应该能够为每个颜色调用相同的 backgroundColor() 颜色。当然,这将需要我跟踪控件或 window 何时调整大小并调整标题栏的 NsWindows,我不确定会导致什么(如果有的话)问题。

  2. 也许有一种方法可以将标题栏的高度设置为 0?我想知道 Discord 应用程序是否正在这样做,因为:

如果仔细观察,会发现写有 "Find or start a conversation" 的编辑框垂直排列着关闭、最小化和最大化按钮,"Activity" 标签也是如此。但是,如果控件确实扩展到应用程序 window 的顶部,那么标准应用程序按钮是如何绘制的?

我很想知道 Slack 和 Discord 如何实现这一点,即使我知道他们没有使用 Qt。

我意识到没有 Qt 解决方案,因为 Qt 不绘制标题栏。我知道这将是 OS-specific,但由于我没有任何使用 Objective-C++ 或使用 Cocoa 的实际经验(我在 macOS 上的所有编程经验都是标准 C++ non-UI 或 Qt-based 代码)如果有任何建议或指导,我将不胜感激!

在本地,这是通过 NSWindowfullSizeContentView and titlebarAppearsTransparent 属性完成的。将它们设置为 true 后,您可以在标题栏下方绘制或放置控件。