簡體   English   中英

QML窗口防止焦點竊取

[英]QML window prevent focus stealing

我正在使用基於qml的彈出通知系統開發混合qml / qwidget應用程序。 通知存儲在列表模型中,我正在使用QML Instantiator創建和處理彈出窗口。

我的問題是,每次彈出新通知時,它都會從主要寡婦那里竊取焦點。 注意,我使用QMainWindow作為應用程序的主窗口。

這是QML代碼段:

Instantiator {
id: instantiator
model: notificationCenter
delegate:
    Window {
    id: notificationWindow
    color: "transparent"
...

變量notificationCenterQAbstractListModel派生的對象,它包含所有活動的通知和一些設置,包括通知列表:

QList <iNotification *> m_notifications;

它還包含QQmlEngineQQmlComponent以通過通知界面加載QML代碼。

使用QML窗口Y坐標的動畫實現彈出窗口。 通知對象的創建默認為y = QApplication::desktop()->availableGeometry().height() - 10在將新通知添加到列表后y = QApplication::desktop()->availableGeometry().height() - 10 ,調用recalculateGeometry函數,該函數將重新計算所有通知的Y坐標並為所有通知窗口設置動畫:

Behavior on y {
    NumberAnimation {
        duration: 300
    }
}

因此,彈出窗口本身是由Instantiator處理的

Qt.WA_ShowWithoutActivating添加到窗口標志無效。

UPD:我設法解決了這個問題。 窗口通過以下標志竊取焦點:

flags: Qt.FramelessWindowHint | Qt.WA_ShowWithoutActivating |  Qt.WindowStaysOnTopHint

但是(令人驚訝地)並沒有使用以下標志來竊取焦點:

flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Popup

找到解決方案,使用

flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Popup

代替

flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.WA_ShowWithoutActivating

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM