Over 90 percent of questions asked here gets answered. If you are looking for information about Qt related issue — register and post your question.
You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features.
By joining our free community you will have access to post topics, communicate privately with other members PMrespond to polls, upload content and access many other special features.
Registration is fast, simple and absolutely free so please, join our community today! If you have any problems with the registration process or your account login, please contact us.
Remember Me? Forum Qt Newbie How to get current drag item? Results 1 to 2 of 2. Thread: How to get current drag item? Thread Tools Show Printable Version.
How to get current drag item? Hi guys. How can I get current drag item in QMimeData? I have the code: Qt Code: Switch view.
QPixmap pix. To copy to clipboard, switch view to plain text mode. I'm not here, not in this world. I'm in the astral part of my mind.
I'm half dead. Re: How to get current drag item? QDropEvent::mimeData contains the item being dragged. Your biological and technological distinctiveness will be added to our own.
Resistance is futile. Please ask Qt related questions on the forum and not using private messages or visitor messages. By chandan in forum Qt Programming. Replies: 0 Last Post: 10th March Replies: 1 Last Post: 18th October Replies: 8 Last Post: 25th May Replies: 2 Last Post: 30th October Replies: 1 Last Post: 15th August Bookmarks Bookmarks Digg del.
The time now is Shop now. Drag and drop is a modern and intuitive way of transferring information within an application or between different applications. It is often provided in addition to clipboard support for moving and copying data. In this chapter, we will see how to add drag and drop support to an application and how to handle custom formats. Then we will show how to reuse the drag and drop code to add clipboard support.
This code reuse is possible because both mechanisms are based on QMimeDataa class that can provide data in several formats. Drag and drop involves two distinct actions: dragging and dropping. Qt widgets can serve as drag sites, as drop sites, or as both. Our first example shows how to make a Qt application accept a drag initiated by another application. The Qt application is a main window with a QTextEdit as its central widget.
When the user drags a text file from the desktop or from a file explorer and drops it onto the application, the application loads the file into the QTextEdit.
Since the purpose of the example is to show drag and drop, much of the functionality we would expect to be in a main window class has been omitted. In the constructor, we create a QTextEdit and set it as the central widget. By default, QTextEdit accepts textual drags from other applications, and if the user drops a file onto it, it will insert the file name into the text. Since drop events are propagated from child to parent, by disabling dropping on the QTextEdit and enabling it on the main window, we get the drop events for the whole window in MainWindow.
The dragEnterEvent is called whenever the user drags an object onto a widget.
Subscribe to RSS
If we call acceptProposedAction on the event, we indicate that the user can drop the drag object on this widget. By default, the widget wouldn't accept the drag. Qt automatically changes the cursor to indicate to the user whether the widget is a legitimate drop site.
Here we want the user to be allowed to drag files, but nothing else. To do so, we check the MIME type of the drag. They consist of a type and a subtype separated by a slash. The clipboard and the drag and drop system use MIME types to identify different types of data. The dropEvent is called when the user drops an object onto the widget.
Typically, users drag only one file at a time, but it is possible for them to drag multiple files by dragging a selection. QWidget also provides dragMoveEvent and dragLeaveEventbut for most applications they don't need to be reimplemented.
The second example illustrates how to initiate a drag and accept a drop.
We will create a QListWidget subclass that supports drag and drop, and use it as a component in the Project Chooser application shown in Figure 9.
Figure 9. The Project Chooser application presents the user with two list widgets, populated with names. Each list widget represents a project. The user can drag and drop the names in the list widgets to move a person from one project to another. All of the drag and drop code is located in the QListWidget subclass. Here's the class definition:.Drag and drop provides a simple visual mechanism which users can use to transfer information between and within applications. Drag and drop is similar in function to the clipboard's cut and paste mechanism.
This document describes the basic drag and drop mechanism and outlines the approach used to enable it in custom controls. Drag and drop operations are also supported by many of Qt's controls, such as the item views and graphics view framework, as well as editing controls for Qt Widgets and Qt Quick.
More information about item views and graphics view is available in Using drag and drop with item views and Graphics View Framework. The QStyleHints object provides some properties that are related to drag and drop operations:. These quantities provide sensible default values that are compliant with the underlying windowing system for you to use if you provide drag and drop support in your controls. To start a drag, create a QDrag object, and call its exec function.
In most applications, it is a good idea to begin a drag and drop operation only after a mouse button has been pressed and the cursor has been moved a certain distance. However, the simplest way to enable dragging from a widget is to reimplement the widget's mousePressEvent and start a drag and drop operation:. Although the user may take some time to complete the dragging operation, as far as the application is concerned the exec function is a blocking function that returns with one of several values.
These indicate how the operation ended, and are described in more detail below. For widgets that need to distinguish between mouse clicks and drags, it is useful to reimplement the widget's mousePressEvent function to record to start position of the drag:.
Later, in mouseMoveEventwe can determine whether a drag should begin, and construct a drag object to handle the operation:. This particular approach uses the QPoint::manhattanLength function to get a rough estimate of the distance between where the mouse click occurred and the current cursor position. This function trades accuracy for speed, and is usually suitable for this purpose.Qt Tutorials For Beginners 19 - QComboBox
To be able to receive media dropped on a widget, call setAcceptDrops true for the widget, and reimplement the dragEnterEvent and dropEvent event handler functions. For example, the following code enables drop events in the constructor of a QWidget subclass, making it possible to usefully implement drop event handlers:. The dragEnterEvent function is typically used to inform Qt about the types of data that the widget accepts.
The following code shows how dragEnterEvent can be reimplemented to tell the drag and drop system that we can only handle plain text:.
The dropEvent is used to unpack dropped data and handle it in way that is suitable for your application. In this case, we accept the proposed action without checking what it is.
In a real world application, it may be necessary to return from the dropEvent function without accepting the proposed action or handling the data if the action is not relevant. For example, we may choose to ignore Qt::LinkAction actions if we do not support links to external sources in our application. We may also ignore the proposed action, and perform some other action on the data.
To do this, we would call the event object's setDropAction with the preferred action from Qt::DropAction before calling accept. This ensures that the replacement drop action is used instead of the proposed action. For more sophisticated applications, reimplementing dragMoveEvent and dragLeaveEvent will let you make certain parts of your widgets sensitive to drop events, and give you more control over drag and drop in your application.
Certain standard Qt widgets provide their own support for drag and drop. When subclassing these widgets, it may be necessary to reimplement dragMoveEvent in addition to dragEnterEvent and dropEvent to prevent the base class from providing default drag and drop handling, and to handle any special cases you are interested in.
In the simplest case, the target of a drag and drop action receives a copy of the data being dragged, and the source decides whether to delete the original.
This is described by the CopyAction action. The target may also choose to handle other actions, specifically the MoveAction and LinkAction actions.
If the source calls QDrag::execand it returns MoveActionthe source is responsible for deleting any original data if it chooses to do so.Using the Drag attached property, any Item can be made a source of drag and drop events within a scene. When a drag is active on an item, any change in that item's position will generate a drag event that will be sent to any DropArea that intersects with the new position of the item.
Other items which implement drag and drop event handlers can also receive these events. The following snippet shows how an item can be dragged with a MouseArea. However, dragging is not limited to mouse drags; anything that can move an item can generate drag events, including touch events, animations and bindings.
A drag can be terminated either by canceling it with Drag. If the drop event is accepted, Drag. Binding this property to the active property of MouseArea::drag will cause startDrag to be called when the user starts dragging.
Setting this property to true will also send a QDragEnter event to the scene with the item's current position. Setting it to false will send a QDragLeave event. While a drag is active any change in an item's position will send a QDragMove event with item's new position to the scene. This property indicates whether to automatically start drags, do nothing, or to use backwards compatible internal drags. The default is to use backwards compatible internal drags.
A drag can also be started manually using startDrag. When using Drag. Automatic you should also define mimeData and bind the active property to the active property of MouseArea : MouseArea::drag.
This property holds the URL of the image which will be used to represent the data during the drag and drop operation. Changing this property after the drag operation has started will have no effect. This property holds a list of keys that can be used by a DropArea to filter drag events.
C++ GUI Programming with Qt4: Drag and Drop
Changing the keys while a drag is active will reset the sequence of drag events by sending a drag leave event followed by a drag enter event with the new source.
This property holds a map of mimeData that is used during startDrag. This property holds an action that is recommended by the drag source as a return value from Drag. This property holds an object that is identified to recipients of drag events as the source of the events. By default this is the item that the Drag property is attached to. Changing the source while a drag is active will reset the sequence of drag events by sending a drag leave event followed by a drag enter event with the new source.
This property holds return values of Drag.
Changing the supportedActions while a drag is active will reset the sequence of drag events by sending a drag leave event followed by a drag enter event with the new source. While a drag is active this property holds the last object to accept an enter event from the dragged item, if the current drag position doesn't intersect any accepting targets it is null.
When a drag is not active this property holds the object that accepted the drop event that ended the drag, if no object accepted the drop or the drag was canceled the target will then be null.
This signal is emitted when a drag finishes and the drag was started with the startDrag method or started automatically using the dragType property. This signal is emitted when a drag is started with the startDrag method or when it is started automatically using the dragType property. Returns the action accepted by the target item. If the target item or a parent doesn't accept the drop event then Qt. IgnoreAction will be returned. Starts sending drag events. Used for starting old-style internal drags.
Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information. Please help me out to solve this How can i do this? I know that i have to handle the Events like. But i dont know how to bring my exact QListView 's Items here. You don't have to subclass the view. All the drag and drop stuff is handled by the model, hence you have to subclass your standard model. You may want to take a look on the model subclassing reference.
Of course you also have to change the drag-and-drop mode of your view to QAbstractItemView::DragDrop to get external drag and drop. Learn more. Asked 7 years, 9 months ago. Active 3 years, 4 months ago. Viewed 7k times. New Moon. New Moon New Moon 1 1 gold badge 20 20 silver badges 34 34 bronze badges.
Active Oldest Votes. ComicSansMS Sign up or log in Sign up using Google. Sign up using Facebook. Sign up using Email and Password. Post as a guest Name. Email Required, but never shown.
Sorry, did never try to mix both internal and external drop. But I do understand why you want it. Maybe you can handle it yourself? For easy useuse the promote feature. Sorry for the lame name. I have the same issue. But in any topic two enough. Qt Forum. QListWidget drag and drop This topic has been deleted. Only users with topic management privileges can see it. Has anyone got any ideas as to what is happening here Cheers.
Reply Quote 0 1 Reply Last reply. Reply Quote 1 1 Reply Last reply. Thanks - I'll give it a go tomorrow. Thanks All working now. Loading More Posts 8 Posts. Reply Reply as topic.All visual items in Qt Quick inherit from Item. Although an Item object has no visual appearance, it defines all the attributes that are common across visual items, such as x and y position, width and height, anchoring and key handling support.
The Item type can be useful for grouping several items under a single root visual item. For example:. Key handling is available to all Item-based visual types via the Keys attached property. The Keys attached property provides basic signals such as pressed and releasedas well as signals for specific keys, such as spacePressed.
The example below assigns keyboard focus to the item and handles the left key via the general onPressed handler and the return key via the onReturnPressed handler:. Item layouts can be mirrored using the LayoutMirroring attached property. This causes anchors to be horizontally reversed, and also causes items that lay out or position their children such as ListView or Row to horizontally reverse the direction of their layouts.
An Item will normally be rendered directly into the window it belongs to. However, by setting layer. Only the offscreen surface, a texture, will be then drawn into the window. If it is desired to have a texture size different from that of the item, this is possible using layer.
To render only a section of the item into the texture, use layer. It is also possible to specify layer. In this case, the exterior will be padded with transparent pixels. The item will use linear interpolation for scaling if layer. Mipmapping may improve visual quality of downscaled items. For mipmapping of single Image items, prefer Image::mipmap.
When applying opacity to an item hierarchy the opacity is applied to each item individually.