qmlベースのポップアップ通知システムを使ってハイブリッドqml/qwidgetアプリケーションを開発しています。通知はリストモデルに保存されており、QML Instantiator
を使用してポップアップを作成して処理しています。QMLウィンドウでフォーカスが盗まれるのを防ぐ
私の問題は、新しい通知がポップアップするたびに、メインウィジェットからフォーカスを奪うということです。 QMainWindowをアプリケーションのメインウィンドウとして使用しています。ここで
はQMLのコードスニペットです:
Instantiator {
id: instantiator
model: notificationCenter
delegate:
Window {
id: notificationWindow
color: "transparent"
...
変数notificationCenter
は、通知のリストを含む、すべてのアクティブな通知といくつかの設定が含まれていQAbstractListModel
由来オブジェクトです:
QList <iNotification *> m_notifications;
またQQmlEngine
が含まれており、 QQmlComponent
通知インターフェイスでQMLコードを読み込みます。
ポップアップは、QMLウィンドウのY座標のアニメーションを使用して実装されます。だから、ポップアップ自体はInstantiator
Behavior on y {
NumberAnimation {
duration: 300
}
}
:通知オブジェクトは、すべての通知のY座標を再計算し、すべての通知ウィンドウをアニメーションrecalculateGeometry
関数が呼び出され、リストに新しい通知を追加した後、デフォルトy = QApplication::desktop()->availableGeometry().height() - 10
で作成されます
Qt.WA_ShowWithoutActivating
をウィンドウフラグに追加しても効果はありません。
UPD: 私はこれを修正することができました。
flags: Qt.FramelessWindowHint | Qt.WA_ShowWithoutActivating | Qt.WindowStaysOnTopHint
しかし、(意外にも)以下のフラグでフォーカスを盗むしない:ウィンドウの盗みは以下のフラグでピント合わせた
flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Popup
ポップアップコードe? – Mitch
@Mitch編集した質問がポップアップシステムを明確にする –