QML窗口防止焦点窃取

时间:2017-05-23 12:12:17

标签: qt qml qt5

我正在使用基于qml的弹出通知系统开发混合qml / qwidget应用程序。通知存储在列表模型中,我使用QML np.right_shift(a,16).astype(np.uint16) >>> array([1], dtype=uint16) 来创建和处理弹出窗口。

我的问题是,每次弹出新通知时,它都会从主寡妇那里抢走焦点。请注意,我正在使用QMainWindow作为应用程序的主窗口。

以下是QML代码段:

ALTER TABLE

变量InstantiatorInstantiator { id: instantiator model: notificationCenter delegate: Window { id: notificationWindow color: "transparent" ... - 派生对象,包含所有有效通知和一些设置,包括通知列表:

notificationCenter

它还包含QAbstractListModelQList <iNotification *> m_notifications; 来加载带有通知界面的QML代码。

使用QML窗口Y坐标的动画实现Popup。在向列表QQmlEngine函数添加新通知后,使用默认QQmlComponent创建通知对象,该函数会重新计算所有通知的Y坐标并为所有通知窗口设置动画:

y = QApplication::desktop()->availableGeometry().height() - 10

因此弹出窗口本身由recalculateGeometry

处理

向窗口标志添加Behavior on y { NumberAnimation { duration: 300 } } 无效。

UPD: 我设法解决了这个问题。窗口窃取的重点是以下标志:

Instantiator

但是(令人惊讶的是)没有通过以下标志窃取焦点:

Qt.WA_ShowWithoutActivating

1 个答案:

答案 0 :(得分:0)

找到解决方案,使用

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

而不是

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