2017-05-23 15 views
0

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 
+0

ポップアップコードe? – Mitch

+0

@Mitch編集した質問がポップアップシステムを明確にする –

答えて

0

ソリューション、

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

の代わり

を使用します
flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.WA_ShowWithoutActivating 
関連する問題