【问题标题】:Borderless window in Qt on Windows which supports native features: aero snap, DWM resize and minimizationWindows 上 Qt 中的无边框窗口,支持本机功能:aero snap、DWM 调整大小和最小化
【发布时间】:2014-04-05 04:34:37
【问题描述】:

我正在尝试在 Windows 上的 Qt 中创建一个支持本机功能的无边框窗口:aero snap、DWM 调整大小和最小化、抖动等。 像 Office 2013 或 Visual Studio 2012。但它们是用 wpf 编写的。 wpf和纯WinApi中有很多例子,但是我找不到任何Qt例子。

最近我发现了暴雪的战网应用(screenshot)。他们使用的是 QT 4.8.5,他们的主窗口的外观和行为完全符合我在应用程序中的要求。

有人知道怎么做吗?

感谢您的帮助。

【问题讨论】:

  • 虽然我不确定 aero snap 你可以通过使用 QWidget::setWindowFlags() 来实现它,这将允许你自己绘制这些控件(这可能是 Battle.net 应用程序确实看到了,因为它有很多自定义菜单控件)。有一篇非常好的文章:qt.developpez.com/tutoriels/braindeadbzh/customwindow - 缺点是它是法语的。
  • 我的应用程序现在是这样工作的。航空快照不起作用。最小化时,窗口消失,没有任何动画。
  • 我正在寻找相同的行为。你找到解决办法了吗?提前致谢。

标签: c++ windows qt aero borderless


【解决方案1】:

我找到了解决这个问题的方法。

我没有使用 Qt 主窗口,而是创建了一个简单的 WinAPI 无边框窗口,例如 this SO discussion。然后我从 QtWinMigrate 项目中添加了 QWinWidget,并用它填充了窗口。

因此,主窗口和可调整大小的边缘由 WinAPI 处理,而主窗口内的所有内容都由 QWinWidget 处理。使用 QWinWidget,您可以像在任何其他 Qt 应用程序中一样创建 Qt gui。

Here is a small example project on GitHub.

【讨论】:

  • 我需要用您的 BorderlessWindow 类替换 QMainWindow 子类。您认为最好的方法是什么?
  • 我的类不是 QT 对象的子类。您可能应该用 QWinWidget 子类替换 QMainWindow 子类。
【解决方案2】:

也许这可能对你有所帮助,Windows 特定的 Qt 类 WinExtras

http://qt-project.org/doc/qt-5/qtwin.html

http://qt-project.org/doc/qt-5/qtwinextras-module.html

此外,您还可以使用 QT Quick 2.0 设计类似于 WPF 的 UI

【讨论】:

  • 听从您的建议,我已经尝试了这些课程。这个example 展示了你可以用它们实现什么。看起来很有趣,但仍然不是我需要的。
  • @PKE wineextras 仅适用于 aero,自定义窗口和效果可以使用 QT Quick 2.0,参见 Qt 的“Example and Demo”二进制文件,安装 Qt 时,可以在 Start菜单 -> Qt
  • 我在自定义 ui 方面没有任何问题。我说的是主窗口。
  • @PKE 你可以有一个无边框窗口然后自定义它stackoverflow.com/questions/19104957/modern-looking-ui-with-qt
  • 而且这个窗口不是原生的。没有 aero snap 和其他 dwm 功能。
猜你喜欢
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2013-07-12
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多