[英]QML window prevent focus stealing
我正在使用基於qml的彈出通知系統開發混合qml / qwidget應用程序。 通知存儲在列表模型中,我正在使用QML Instantiator
創建和處理彈出窗口。
我的問題是,每次彈出新通知時,它都會從主要寡婦那里竊取焦點。 注意,我使用QMainWindow作為應用程序的主窗口。
這是QML代碼段:
Instantiator {
id: instantiator
model: notificationCenter
delegate:
Window {
id: notificationWindow
color: "transparent"
...
變量notificationCenter
是QAbstractListModel
派生的對象,它包含所有活動的通知和一些設置,包括通知列表:
QList <iNotification *> m_notifications;
它還包含QQmlEngine
和QQmlComponent
以通過通知界面加載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.