QWidget/QWindow标题栏:自定义外观,原生感觉(类似Chrome)

QWidget / QWindow title bar: custom look, native feel (similar to Chrome)

本文关键字:感觉 原生 类似 Chrome 外观 QWindow 标题栏 自定义 QWidget      更新时间:2023-10-16

我知道如何使QWidget(在Qt4或Qt5中)/QWindow(自Qt5以来)无边框,绘制自定义标题栏,并手动实现鼠标拖动,只需使用一些mouseMoveEvent跟踪鼠标位置并更新窗口位置即可在屏幕上移动窗口。

但是,此移动的行为与窗口管理器实现的本机移动不同。例如,将窗口移动到屏幕边界附近可以被解释为"全屏"或"分屏";或者窗口捕捉到彼此的边界,这取决于系统/窗口管理器。如果你像上面那样实现窗口移动,这些东西就不起作用了。

Google Chrome/Chromium只是应用程序的一个例子,它实现了自定义窗口标题栏和边框,同时仍然适应窗口管理器的本地行为。我想知道Chrome是否自己实现了这些功能(并检测窗口管理器及其配置),或者大多数窗口管理器中是否有一些功能(显然,这仍然高度依赖于平台)可以告诉"启动本机窗口移动"answers"停止本机窗口移动"或类似的功能。

Qt中可能有这样的东西吗?如果没有,也许可以使用Qxt等其他库?

仅供参考:我主要针对Windows和Linux,在那里我看到了用户安装任何窗口管理器的困难。

基于最近对Qt4的尝试,我担心答案是,您需要根据每个平台/每个窗口管理器来调整它。我希望QWindow的补丁可以改善这一领域的行为,但我不知道有什么标准挂钩可以告诉操作系统/窗口管理器你正在努力实现什么。

同样,Qt不应该"妨碍"解决这个问题,它只是一个无法以通用方式帮助你的领域。