[Interest] Qml Drag n Drop Custom QQuickItem
Jérôme Godbout
jerome at bodycad.com
Thu Sep 3 19:11:36 CEST 2015
On same subject, is drag and drop from application external (files for
example) suppose to work into the current application context:
- *QMainWindow *
- can have the drag n drop event if *setAcceptDrops(true)*;
- getting the url list here just right if enabled but it's not what is
wanted in some case
- *QQuickView*
- *Qml DropArea*
- does not seem to receive the drag n drop events
- The drag and drop always is refused (under Windows with
interdiction mouse cursor).
Since QQuickView is not a Qwidget should the QQuickView have some sort of
*setAcceptDrops(true);* equivalent? or is that unnecessary?
Hope someone have some information on all this, it's highly confusing
enough and example are over simplified to near useless concerning drag n
drop from/to Qml versus C++ Qt one and possible interaction between the two.
Thanks,
Jerome
On Wed, Sep 2, 2015 at 1:06 PM, Jérôme Godbout <jerome at bodycad.com> wrote:
> Hi,
> I'm trying to add behaviors for drag n drop on a custom QQuickItem in C++
> from Qml.
>
> I have use inside the C++ part:
> setFlags(ItemAcceptsDrops);
> into the custom QQuickItem constructor.
>
> I now receive event into custom handler:
> dragEnterEvent(QDragEnterEvent* event)
> inside the overload function. I can accept the event to begin receive :
> dragMoveEvent(QDragMoveEvent* event)
>
> This seem to work, but the event have a null source and no data inside to
> base my choice to accept or not the event. The Qml attached
> QQuickDragAttached element on my object seem to have the proper information
> inside it. Source is set and valid, keys are presents, supportedActions and
> proposedAction are ok there. But I don't received them inside my custom
> QQuickItem handler of dragEnterEvent, the QDragEnterEvent::source is null,
> only the supportedActions and proposedActions are set properly.
>
> Here's a small example of Qml scripts
>
> Item
> {
> Rectangle
> {
> id: greenRect_
> x: 200
> y: 100
> width: 20;
> height: 20
> color: "green"
>
> Drag.active: dragArea_.drag.active
> Drag.hotSpot.x: width * 0.5
> Drag.hotSpot.y: height * 0.5
> Drag.proposedAction: Qt.MoveAction
> //Drag.source: greenRect_ // was already set to the proper value, try to
> enforce it just to make sure, not difference
> Drag.keys: ["green"]
>
> MouseArea
> {
> id: dragArea_
> anchors.fill: parent
> drag.target: parent
> }
> }
>
> MyCustomQQuickItem
> {
> x: 300
> y: 300
> width: 200
> height: 200
> }
> }
>
> I can drag the rectangle hover my item and receive the nearly empty event.
> I guess I'm missing something fundamental here but I don't known what it is.
>
> 1. Anybody have the mimeData map format? Drag.mimeData: { 'hasText':
> true, 'text': "green" } ???
> 2. Where does the Drag.keys end up inside the C++ ?
> 3. Is my drag n drop Qml part done right?
> 4. What is the accept drag n drop flow to end up with
> a dropEvent(QDropEvent *event) being called and handle properly.
> 1. QDragEnterEvent must be Accepted
> 2. QDragMoveEvent, (what to do in which case???) what happen if
> accepted or not exactly???
> 3. When does the QDragLeaveEvent handler called exactly?
> 4. How does one know when the drag was released (actually dropped)?
>
>
> Thanks,
> Jerome
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150903/f512af66/attachment.html>
More information about the Interest
mailing list