QList Drag and Drop Example: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
Example of the simple moving items using drag & drop betweeen two or more QListViews.
Example of the simple moving items using drag & drop betweeen two or more QListViews.


listbox.h:<br />
listbox.h:<br /><code>#ifndef LISTBOX_H<br />#define LISTBOX_H


listbox.cpp:<br />
#include &lt;QtGui&amp;gt;


Now, we only add use these object instead of QListView.
class ListBox : public QListWidget<br />{<br /> Q_OBJECT<br />public:<br /> ListBox(QWidget *parent);<br />protected:<br /> void dragMoveEvent(QDragMoveEvent *e);<br /> void dropEvent(QDropEvent *event);<br /> void startDrag(Qt::DropActions supportedActions);<br /> void dragEnterEvent(QDragEnterEvent *event);<br /> Qt::DropAction supportedDropActions();<br />signals:<br /> void itemDroped();<br />};
 
#endif // LISTBOX_H</code>
 
listbox.cpp:<br /><code>#include &quot;listbox.h&amp;quot;
 
void ListBox::dragMoveEvent(QDragMoveEvent *e)<br />{<br /> if (e-&gt;mimeData()<s>&gt;hasFormat(&quot;application/x-item&amp;quot;) &amp;&amp; e</s>&gt;source() != this) {<br /> e-&gt;setDropAction(Qt::MoveAction);<br /> e-&gt;accept();<br /> } else<br /> e-&gt;ignore();
 
}
 
ListBox::ListBox(QWidget *parent) : QListWidget(parent)<br />{<br /> this-&gt;setViewMode(QListView::IconMode);<br /> this-&gt;setIconSize(QSize(55, 55));<br /> this-&gt;setSelectionMode(QAbstractItemView::SingleSelection);<br /> this-&gt;setDragEnabled(true);<br /> this-&gt;setDefaultDropAction(Qt::MoveAction);<br /> this-&gt;setAcceptDrops(true);<br /> this-&gt;setDropIndicatorShown(true);<br />}
 
void ListBox::dropEvent(QDropEvent *event)<br />{<br /> if (event-&gt;mimeData()<s>&gt;hasFormat(&quot;application/x-item&amp;quot;)) {<br /> event</s>&gt;accept();<br /> event-&gt;setDropAction(Qt::MoveAction);<br /> QListWidgetItem *item = new QListWidgetItem;<br /> QString name = event-&gt;mimeData()<s>&gt;data(&quot;application/x-item&amp;quot;);<br /> item</s>&gt;setText(name);<br /> item-&gt;setIcon(QIcon(&quot;:/images/iString&amp;quot;)); //set path to image<br /> addItem(item);<br /> }<br /> else<br /> event-&gt;ignore();<br />}
 
void ListBox::startDrag(Qt::DropActions supportedActions)<br />{<br /> QListWidgetItem *item = currentItem();<br /> QMimeData *mimeData = new QMimeData;<br /> QByteArray ba;<br /> ba = item-&gt;text().toLatin1().data();<br /> mimeData-&gt;setData(&quot;application/x-item&amp;quot;, ba);<br /> QDrag *drag = new QDrag(this);<br /> drag-&gt;setMimeData(mimeData);<br /> if (drag-&gt;exec&amp;amp;#40;Qt::MoveAction&amp;amp;#41; == Qt::MoveAction) {<br /> delete takeItem(row(item));<br /> emit itemDroped();<br /> }<br />}
 
void ListBox::dragEnterEvent(QDragEnterEvent *event)<br />{<br /> if (event-&gt;mimeData()<s>&gt;hasFormat(&quot;application/x-item&amp;quot;))<br /> event</s>&gt;accept();<br /> else<br /> event-&gt;ignore();<br />}
 
Qt::DropAction ListBox::supportedDropActions()<br />{<br /> return Qt::MoveAction;<br />}</code>

Revision as of 11:14, 24 February 2015

Example of the simple moving items using drag & drop betweeen two or more QListViews.

listbox.h:

#ifndef LISTBOX_H<br />#define LISTBOX_H

#include &lt;QtGui&amp;gt;

class ListBox : public QListWidget<br />{<br /> Q_OBJECT<br />public:<br /> ListBox(QWidget *parent);<br />protected:<br /> void dragMoveEvent(QDragMoveEvent *e);<br /> void dropEvent(QDropEvent *event);<br /> void startDrag(Qt::DropActions supportedActions);<br /> void dragEnterEvent(QDragEnterEvent *event);<br /> Qt::DropAction supportedDropActions();<br />signals:<br /> void itemDroped();<br />};

#endif // LISTBOX_H

listbox.cpp:

#include &quot;listbox.h&amp;quot;

void ListBox::dragMoveEvent(QDragMoveEvent *e)<br />{<br /> if (e-&gt;mimeData()<s>&gt;hasFormat(&quot;application/x-item&amp;quot;) &amp;&amp; e</s>&gt;source() != this) {<br /> e-&gt;setDropAction(Qt::MoveAction);<br /> e-&gt;accept();<br /> } else<br /> e-&gt;ignore();

}

ListBox::ListBox(QWidget *parent) : QListWidget(parent)<br />{<br /> this-&gt;setViewMode(QListView::IconMode);<br /> this-&gt;setIconSize(QSize(55, 55));<br /> this-&gt;setSelectionMode(QAbstractItemView::SingleSelection);<br /> this-&gt;setDragEnabled(true);<br /> this-&gt;setDefaultDropAction(Qt::MoveAction);<br /> this-&gt;setAcceptDrops(true);<br /> this-&gt;setDropIndicatorShown(true);<br />}

void ListBox::dropEvent(QDropEvent *event)<br />{<br /> if (event-&gt;mimeData()<s>&gt;hasFormat(&quot;application/x-item&amp;quot;)) {<br /> event</s>&gt;accept();<br /> event-&gt;setDropAction(Qt::MoveAction);<br /> QListWidgetItem *item = new QListWidgetItem;<br /> QString name = event-&gt;mimeData()<s>&gt;data(&quot;application/x-item&amp;quot;);<br /> item</s>&gt;setText(name);<br /> item-&gt;setIcon(QIcon(&quot;:/images/iString&amp;quot;)); //set path to image<br /> addItem(item);<br /> }<br /> else<br /> event-&gt;ignore();<br />}

void ListBox::startDrag(Qt::DropActions supportedActions)<br />{<br /> QListWidgetItem *item = currentItem();<br /> QMimeData *mimeData = new QMimeData;<br /> QByteArray ba;<br /> ba = item-&gt;text().toLatin1().data();<br /> mimeData-&gt;setData(&quot;application/x-item&amp;quot;, ba);<br /> QDrag *drag = new QDrag(this);<br /> drag-&gt;setMimeData(mimeData);<br /> if (drag-&gt;exec&amp;amp;#40;Qt::MoveAction&amp;amp;#41; == Qt::MoveAction) {<br /> delete takeItem(row(item));<br /> emit itemDroped();<br /> }<br />}

void ListBox::dragEnterEvent(QDragEnterEvent *event)<br />{<br /> if (event-&gt;mimeData()<s>&gt;hasFormat(&quot;application/x-item&amp;quot;))<br /> event</s>&gt;accept();<br /> else<br /> event-&gt;ignore();<br />}

Qt::DropAction ListBox::supportedDropActions()<br />{<br /> return Qt::MoveAction;<br />}