2013-07-30 19 views
12

MouseArea adlı kullanıcının konumuChanged olayını temel alınarak mı uyarlamak mümkün müdür?QML - MouseArea - propagating onPositionChanged

Ben en üstteki MouseArea arasında varolan herhangi bir sinyal işleyicisi için mouse.acceptedfalse ayarlı yanı sıra propagateComposedEventstrue ayarını denedim. Bunlardan hiçbiri işe yaramadı (propagateComposedEvents dokümantasyonundan dolayı hiç şaşırmadığım halde belgeler sadece clicked, doubleClicked ve pressAndHold gibi olayları aktardığını söylüyor).

+0

https://bugreports.qt-project.org/browse/QTBUG-37545 –

cevap

3

Yapınıza bağlı olarak, olayı her zaman elle onPositionChanged işleyici çağrınızı temel alarak gösteren bir yöntem oluşturabilirsin. ForlyingMouseArea.positionChanged (fare) Bu, alttaki MouseArea'daki sinyali el ile göndermelidir. Tek endişem, bir MouseEvent nesnesini bu şekilde iletemeyebilecek olmanızdır (bir dize dışında hiç bir şeyle denemedim). Bununla birlikte, bu el kitabını her zaman C++ uygulamasında her tür dönüşüm sorunlarından kesinlikle etkilenmeyecek şekilde gerçekleştirebilirsiniz. Birden fare alanları ile pozisyon değişikliği olaylarını işlemek gerekmedikçe

+0

Şu an için, geçerli fare konumunu içeren kök bileşenine bir özellik ekledim (çünkü şu anda sahip olduğum tek bilgi budur) meraklı). Pozisyon, bileşenin 'MouseArea' yanı sıra tüm temel alanlar tarafından güncellenir. Çok güzel değil ve korumak için biraz zor (tüm bu 'MouseArea'ların altını, bahsettiğiniz gibi ayrı ayrı güncellemeyi unutmayın) ama işe yarıyor. –

1

aynı anda size üst fare alanını Reparent deneyebilirsiniz:

import QtQuick 2.2 
import QtQuick.Layouts 1.1 

Rectangle { 
    id: __root 
    color: "lightgreen" 
    width: 360 
    height: 360 

    Rectangle { 
     id: rect2 
     width: 100; height: 100 
     color: "cyan" 
     MouseArea { 
      parent: __root // set 'logical' parent 
      anchors.fill: rect2 // set 'visual' ancestor 
      hoverEnabled: true 

      onPositionChanged: { 
       console.log('mouse area 2 onPositionChanged'); 
      } 
     } 
    } 


    MouseArea { 
     anchors.fill: parent 
     hoverEnabled: true 

     onPositionChanged: { 
      console.log('mouse area 1 onPositionChanged'); 
     } 
    } 
} 

bir unresolved bugreport yoktur.