繁体   English   中英

QML无框窗口支持航空快照

[英]QML frameless window supporting aero snap

我使用无框窗口制作了一个QML应用程序,并实现了自己拖动和调整大小等操作。 但是这样,应用程序不支持Windows aero snap或Gnome窗口管理器功能等本机窗口管理器功能。 所以我搜索并找到了这个 ,有人找到了一种使用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 Obers说明我得到了它的工作方式。 但是现在我遇到了问题,当我调整大小或移动它时,Qt会留下一个带有框架大小的未拉伸区域。

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

HWND handle = window->winId();

您可以将此句柄传递给本机函数。

要过滤WM_NCCALCSIZE消息,您需要通过WM_NCCALCSIZE QAbstractNativeEventFilter来实现本机事件处理程序,并通过调用qApp->installNativeEventFilter(myFilter)在应用程序上安装它的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM