QList Drag and Drop Example: Difference between revisions
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 | ||
#include <QtGui&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</code> | |||
listbox.cpp:<br /><code>#include "listbox.h&quot; | |||
void ListBox::dragMoveEvent(QDragMoveEvent *e)<br />{<br /> if (e->mimeData()<s>>hasFormat("application/x-item&quot;) && e</s>>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()<s>>hasFormat("application/x-item&quot;)) {<br /> event</s>>accept();<br /> event->setDropAction(Qt::MoveAction);<br /> QListWidgetItem *item = new QListWidgetItem;<br /> QString name = event->mimeData()<s>>data("application/x-item&quot;);<br /> item</s>>setText(name);<br /> item->setIcon(QIcon(":/images/iString&quot;)); //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&quot;, ba);<br /> QDrag *drag = new QDrag(this);<br /> drag->setMimeData(mimeData);<br /> if (drag->exec&amp;#40;Qt::MoveAction&amp;#41; == Qt::MoveAction) {<br /> delete takeItem(row(item));<br /> emit itemDroped();<br /> }<br />} | |||
void ListBox::dragEnterEvent(QDragEnterEvent *event)<br />{<br /> if (event->mimeData()<s>>hasFormat("application/x-item&quot;))<br /> event</s>>accept();<br /> else<br /> event->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 <QtGui&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 "listbox.h&quot;
void ListBox::dragMoveEvent(QDragMoveEvent *e)<br />{<br /> if (e->mimeData()<s>>hasFormat("application/x-item&quot;) && e</s>>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()<s>>hasFormat("application/x-item&quot;)) {<br /> event</s>>accept();<br /> event->setDropAction(Qt::MoveAction);<br /> QListWidgetItem *item = new QListWidgetItem;<br /> QString name = event->mimeData()<s>>data("application/x-item&quot;);<br /> item</s>>setText(name);<br /> item->setIcon(QIcon(":/images/iString&quot;)); //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&quot;, ba);<br /> QDrag *drag = new QDrag(this);<br /> drag->setMimeData(mimeData);<br /> if (drag->exec&amp;#40;Qt::MoveAction&amp;#41; == Qt::MoveAction) {<br /> delete takeItem(row(item));<br /> emit itemDroped();<br /> }<br />}
void ListBox::dragEnterEvent(QDragEnterEvent *event)<br />{<br /> if (event->mimeData()<s>>hasFormat("application/x-item&quot;))<br /> event</s>>accept();<br /> else<br /> event->ignore();<br />}
Qt::DropAction ListBox::supportedDropActions()<br />{<br /> return Qt::MoveAction;<br />}