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

时间:2013-02-04 22:02:54

标签: c++ qt qt4 qt5 window-managers

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

但是,此移动的行为与窗口管理器实现的移动行为不同。例如,在屏幕边框附近移动窗口可以解释为“全屏”或“分屏”;或Windows与对方的边框对齐,具体取决于系统/窗口管理器。如果你实现上面的窗口移动,这些东西都不起作用。

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

在Qt中是否可以这样?如果没有,可能使用其他一些库,如Qxt?

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

1 个答案:

答案 0 :(得分:2)

基于最近对Qt4的尝试,我担心答案是,你需要调整每个平台/每个窗口管理器。我希望QWindow能够改进这方面的行为补丁,但我不知道有任何标准的钩子告诉操作系统/窗口管理员你想要实现的目标。

同样Qt应该不会妨碍'阻碍'要解决这个问题,它只是一个无法以通用方式帮助你的地方。