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 ]