- All (478)
- jom (0)
- Qt Linguist (7)
- Qt Eclipse Integration (9)
- Qt Designer (7)
- Qt Creator (4)
- Qt build system: qmake (31)
- Qt build system: configure (3)
- Qt Assistant (5)
- Printing (4)
- Porting from Qt 3 to Qt 4 (1)
- Plugins (7)
- Qt Visual Studio AddIn (2)
- Qt/MFC Migration (2)
- QtScript (3)
- MDI (2)
- XML (1)
- Widgets (22)
- WebKit (5)
- Tools and Containers (2)
- Threads (2)
- Text Handling (10)
- SQL (6)
- QtTest (1)
- QtService (1)
- Platform: Windows (49)
- Platform: Unix (16)
- Platform: Mac OS X (18)
- Image Formats (2)
- I/O (2)
- Graphicsview (8)
- Font handling (9)
- Event System (18)
- Drag and Drop (4)
- Dialogs (6)
- Desktop integration (3)
- ActiveQt (3)
- Itemviews (60)
- Layout (4)
- Qt Quick (10)
- Qt SDK (1)
- Licensing (2)
- Platform: Embedded Linux (38)
- Painting (32)
- OpenGL (4)
- Object Model (6)
- Network (5)
- Multimedia (3)
- Miscellanous (23)
- Main Window (19)
- Look and Feel (23)
- Development (0)
- Getting Involved (0)
- Routines (0)
How can I do drag and drop in a widget?
Drag and drop support in Qt is centered around the QDrag [qt.nokia.com] class that handles most of the details of a drag and drop operation.
In addition to creating a QDrag object, you need to reimplement dragMoveEvent() [qt.nokia.com] to accept the event and dropEvent() [qt.nokia.com] to handle the data dropped on the widget. Finally dragEnterEvent() [doc.qt.nokia.com] needs to be reimplemented to accept the event.
You also need to call
- setAcceptDrops(true)
on the widgets that should be able to accept a drop.
For more information, read the general documentation [qt.nokia.com] on drag and drop:
The example below illustrates how this can be done.
- #include <QtGui>
- {
- Q_OBJECT
- public:
- public slots:
- void makeDrag();
- protected:
- };
- {
- public:
- protected:
- };
- {
- layout->addWidget(pushButton);
- connect(pushButton, SIGNAL(pressed()), this, SLOT(makeDrag()));
- MyGroupBox *box = new MyGroupBox(this);
- layout->addWidget(box);
- // Allow media to be dropped on the widget
- setAcceptDrops(true);
- box->setAcceptDrops(true);
- }
- void MyDialog::makeDrag()
- {
- // The data to be transferred by the drag and drop operation is contained in a QMimeData object
- data->setText("This is a test");
- // Assign ownership of the QMimeData object to the QDrag object.
- dr->setMimeData(data);
- // Start the drag and drop operation
- dr->start();
- }
- {
- // The event needs to be accepted here
- de->accept();
- }
- {
- // Set the drop action to be the proposed action.
- event->acceptProposedAction();
- }
- {
- // Unpack dropped data and handle it the way you want
- qDebug("Contents: %s", de->mimeData()->text().toLatin1().data());
- }
- {
- // Unpack dropped data and handle it the way you want
- qDebug("Contents: %s", de->mimeData()->text().toLatin1().data());
- }
- {
- // The event needs to be accepted here
- de->accept();
- }
- {
- // Set the drop action to be the proposed action.
- event->acceptProposedAction();
- }
- #include "main.moc"
- int main(int argc, char **argv)
- {
- MyDialog d;
- d.show();
- return a.exec();
- }

No comments