c++ - QWidget/QWindow 标题栏 : custom look, 原生感觉(类似Chrome)

标签 c++ qt qt4 qt5 window-managers

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

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

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

在 Qt 中可以实现类似的功能吗?如果没有,也许使用其他一些库,如 Qxt?

仅供引用:我主要针对 Windows 和 Linux,我发现用户很难安装任何窗口管理器。

最佳答案

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

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

关于c++ - QWidget/QWindow 标题栏 : custom look, 原生感觉(类似Chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696484/

相关文章:

c++ - 来自 boost/serialization/vector #include 的链接器错误

c++ - 无法将信号连接到 main() 内的函数

c++ - 使用 QAudioRecorder 时禁止创建 wav 文件

qt4 - 提取QHeaderView的文本

c++ - 是否可以在 Qt 中使用带下划线的字母作为键盘快捷键?

c++ - C++游戏的列表结构

c++ - 带有数组的 unique_ptr 有什么用吗?

c++ - 显式共享是什么意思?

c++ - 查找从未调用的函数

c++ - 通过结构将参数传递给 CreateThread() 并更改后续线程的成员而不影响先前的线程?