QML无框窗户支撑Aero快照

QML frameless window supporting aero snap

本文关键字:Aero 快照 窗户 QML      更新时间:2023-10-16

我已经使用无框窗口制作了QML应用程序,并实现了诸如我自己拖动和调整大小之类的操作。但是,通过这种方式,应用程序不支持本机窗口管理器功能,例如Windows Aero Snap或GNOME Window Manager功能。因此,我搜索并找到了这一点,有人找到了一种使用Win32 API在无框窗口中支持它们的方法。但是,有没有一种方法可以将其与QML应用程序或其他使用本机窗口管理器功能的方法?

使用?

我使用此代码从C 初始化窗口:

QQmlApplicationEngine engine(QUrl("qrc:/qml/main.qml"));
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
window->setFlags(window->flags() | Qt::FramelessWindowHint);
if ( !window ) {
    qWarning("Error: Your root item has to be a Window.");
    return -1;
}
window->show();

编辑:我还想使用本机窗口管理器落下阴影,例如我链接到的示例。

编辑:我有第二个问题:按照@kuba的说明,我得到了它的目的。但是现在我有一个问题,当我调整大小或移动时,QT留下了一个毫无疑问的区域。

winapi窗口句柄由 window->winId()提供:

HWND handle = window->winId();

您可以将此手柄传递给本机功能。

要过滤WM_NCCALCSIZE消息,您需要通过子类QAbstractNativeEventFilter来实现本机事件处理程序,并通过调用qApp->installNativeEventFilter(myFilter)