6

我知道如何使 QWidget(在 Qt4 或 Qt5 中)/ QWindow(从 Qt5 开始)无边框,绘制自定义标题栏并手动实现鼠标拖动以通过简单地跟踪鼠标位置mouseMoveEvent并更新窗口来在屏幕上移动窗口位置。

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

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

在 Qt 中可能有这样的事情吗?如果没有,也许使用其他一些库,如 Qxt?

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

4

1 回答 1

2

基于最近对 Qt4 的尝试,我担心答案是,你需要调整这个 per-platform / per-window-manager。我希望 QWindow 的补丁可以改善该区域的行为,但我不知道有任何标准挂钩可以告诉操作系统/窗口管理器您要实现的目标。

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

于 2013-02-13T16:12:46.943 回答