QList Drag and Drop Example: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 3: Line 3:
listbox.h:<br /><code>#ifndef LISTBOX_H<br />#define LISTBOX_H
listbox.h:<br /><code>#ifndef LISTBOX_H<br />#define LISTBOX_H


#include &lt;QtGui&amp;gt;
#include <QtGui>


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 />};
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 />};
Line 9: Line 9:
#endif // LISTBOX_H</code>
#endif // LISTBOX_H</code>


listbox.cpp:<br /><code>#include &quot;listbox.h&amp;quot;
listbox.cpp:<br /><code>#include "listbox.h"


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();
void ListBox::dragMoveEvent(QDragMoveEvent *e)<br />{<br /> if (e->mimeData()->hasFormat("application/x-item") &amp;&amp; e->source() != this) {<br /> e->setDropAction(Qt::MoveAction);<br /> e->accept();<br /> } else<br /> e->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 />}
ListBox::ListBox(QWidget *parent) : QListWidget(parent)<br />{<br /> this->setViewMode(QListView::IconMode);<br /> this->setIconSize(QSize(55, 55));<br /> this->setSelectionMode(QAbstractItemView::SingleSelection);<br /> this->setDragEnabled(true);<br /> this->setDefaultDropAction(Qt::MoveAction);<br /> this->setAcceptDrops(true);<br /> this->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::dropEvent(QDropEvent *event)<br />{<br /> if (event->mimeData()->hasFormat("application/x-item")) {<br /> event->accept();<br /> event->setDropAction(Qt::MoveAction);<br /> QListWidgetItem *item = new QListWidgetItem;<br /> QString name = event->mimeData()->data("application/x-item");<br /> item->setText(name);<br /> item->setIcon(QIcon(":/images/iString")); //set path to image<br /> addItem(item);<br /> }<br /> else<br /> event->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::startDrag(Qt::DropActions supportedActions)<br />{<br /> QListWidgetItem *item = currentItem();<br /> QMimeData *mimeData = new QMimeData;<br /> QByteArray ba;<br /> ba = item->text().toLatin1().data();<br /> mimeData->setData("application/x-item", ba);<br /> QDrag *drag = new QDrag(this);<br /> drag->setMimeData(mimeData);<br /> if (drag->exec(Qt::MoveAction) == 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 />}
void ListBox::dragEnterEvent(QDragEnterEvent *event)<br />{<br /> if (event->mimeData()->hasFormat("application/x-item"))<br /> event->accept();<br /> else<br /> event->ignore();<br />}


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

Revision as of 14:27, 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 <QtGui>

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 "listbox.h"

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

}

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

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

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

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

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