Trolltech Home | Qt-interest Home | Recent Threads | All Threads | Author | Date
All threads index page 3

Qt-interest Archive, April 2007
drag&drop events


Message 1 in thread

Hi,

I try to process drag&drop events of a widget using an event filter
QObject. The widget is initialised with setDragEnabled(true) and
setDragDropMode(QAbstractItemView::DragDrop); don't know if both are needed.

In my event filter, I look for events of the types DragEnter, DragMove
and Drop. The DragEnter event is recognised alright, and I call its
acceptProposedAction method. But the subsequent DragMove events are not
passed to the event filter, or is not generated at all. Any idea what's
going wrong here?

Here's some sample code:

bool eventFilter(QObject *obj, QEvent *event) {
  if (event->type() == QEvent::DragEnter) {
    QDragEnterEvent* dee = static_cast<QDragEnterEvent*>(event);
    dee->acceptProposedAction();
  }
  else if (event->type() == QEvent::DragMove) {
    QDragMoveEvent* dme = static_cast<QDragMoveEvent*>(event);
    dme->acceptProposedAction();
  }
  else if (event->type() == QEvent::Drop) {
   ...
  }
  return false;
}


Regards,
M

--
 [ signature omitted ] 

Message 2 in thread

Please find comments inside :)

QMartin wrote:
> 
> [...]
> 
> bool eventFilter(QObject *obj, QEvent *event) {
>   if (event->type() == QEvent::DragEnter) {
>     QDragEnterEvent* dee = static_cast<QDragEnterEvent*>(event);
>     dee->acceptProposedAction();
	// don't forget to
	return true;
>   }
>   else if (event->type() == QEvent::DragMove) {
>     QDragMoveEvent* dme = static_cast<QDragMoveEvent*>(event);
>     dme->acceptProposedAction();
	// don't forget to
	return true;
>   }
>   else if (event->type() == QEvent::Drop) {
>    ...
	// don't forget to
	return true;
>   }
    // return false;
    // better pass this to the parent so someone else can do event filtering
    else
      return QObject::eventFilter(obj, event);
> }
> 
> 
> Regards,
> M

if you return true all the time, the event is passed to the parent and he will discard
this for you, i think.

-- 
 [ signature omitted ] 

Message 3 in thread

Michael Sprauer wrote:
> Please find comments inside :)
> 
> QMartin wrote:
>> [...]
>>
>> bool eventFilter(QObject *obj, QEvent *event) {
>>   if (event->type() == QEvent::DragEnter) {
>>     QDragEnterEvent* dee = static_cast<QDragEnterEvent*>(event);
>>     dee->acceptProposedAction();
> 	// don't forget to
> 	return true;
>>   }
>>   else if (event->type() == QEvent::DragMove) {
>>     QDragMoveEvent* dme = static_cast<QDragMoveEvent*>(event);
>>     dme->acceptProposedAction();
> 	// don't forget to
> 	return true;
>>   }
>>   else if (event->type() == QEvent::Drop) {
>>    ...
> 	// don't forget to
> 	return true;
>>   }
>     // return false;
>     // better pass this to the parent so someone else can do event filtering
>     else
>       return QObject::eventFilter(obj, event);
>> }


Yesssss, that's it. Thanks a lot :)

Best,
M

--
 [ signature omitted ]