ソースを参照

Add ctkVTKMagnifyView::hasCursorInObservedWidget

For application not doing immediate action on enteredObservedWidget or
leftObservedWidget, it can be useful to know if a widget was last entered
or left
Julien Finet 13 年 前
コミット
0b84f5c09f
共有2 個のファイルを変更した22 個の追加9 個の削除を含む
  1. 19 9
      Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp
  2. 3 0
      Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.h

+ 19 - 9
Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.cpp

@@ -560,10 +560,26 @@ bool ctkVTKMagnifyView::isObserved(QVTKWidget * widget) const
 
 // --------------------------------------------------------------------------
 int ctkVTKMagnifyView::numberObserved() const
-  {
+{
   Q_D(const ctkVTKMagnifyView);
   return d->ObservedQVTKWidgets.length();
-  }
+}
+
+// --------------------------------------------------------------------------
+bool ctkVTKMagnifyView::hasCursorInObservedWidget()const
+{
+  Q_D(const ctkVTKMagnifyView);
+  // checking underMouse is faster than 
+  // QApplication::widgetAt(QCursor::pos())
+  foreach(const QVTKWidget* widget, d->ObservedQVTKWidgets)
+    {
+    if (widget->underMouse())
+      {
+      return true;
+      }
+    }
+  return false;
+}
 
 // --------------------------------------------------------------------------
 void ctkVTKMagnifyView::remove(QVTKWidget * widget)
@@ -616,11 +632,5 @@ bool ctkVTKMagnifyView::eventFilter(QObject * obj, QEvent * event)
     d->pushRemovePixmapEvent();
     emit leftObservedWidget(widget);
     }
-  // For other event types, use standard event processing
-  else
-    {
-    return QObject::eventFilter(obj, event);
-    }
-
-  return false;
+  return this->Superclass::eventFilter(obj, event);
 }

+ 3 - 0
Libs/Visualization/VTK/Widgets/ctkVTKMagnifyView.h

@@ -97,6 +97,9 @@ public:
   /// Returns the number of observed QVTKWidgets
   int numberObserved()const;
 
+  /// Returns true if the mouse cursor is over an observed widget,
+  /// false otherwise.
+  bool hasCursorInObservedWidget()const;
 protected:
   QScopedPointer<ctkVTKMagnifyViewPrivate> d_ptr;