[英]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.