QML无框窗口支持航空快照

时间:2014-02-04 21:29:43

标签: c++ windows qt winapi qml

我使用无框窗口创建了一个QML应用程序,并实现了自己拖动和调整大小等操作。但是这样,应用程序不支持Windows aero snap或Gnome窗口管理器功能等本机窗口管理器功能。所以我搜索并找到了this,其中有人找到了使用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会留下一个带有框架大小的未拉伸区域。

1 个答案:

答案 0 :(得分:1)

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

提供
HWND handle = window->winId();

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

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