簡體   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