Drag and Drop mezi dvěma tlačítky v našem programu nepoužíváme.
Ale může se hodit.
#include <QDrag> #include <QMimeData> void MainWindow::on_sourceButton_pressed() { QDrag * drag = new QDrag (this); QMimeData * data = new QMimeData; data->setText ("nejaky text"); data->setColorData(QColor ("orange")); drag->setMimeData (data); Qt::DropAction action = drag->exec ( Qt::MoveAction | Qt::CopyAction | Qt::LinkAction); if (action == Qt::MoveAction) ui->sourceButton->setText ("move"); if (action == Qt::CopyAction) ui->sourceButton->setText ("copy"); if (action == Qt::LinkAction) ui->sourceButton->setText ("link"); }
class MyButton : public QPushButton { public: explicit MyButton (QWidget *parent = nullptr); protected: void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); };
#include <QMimeData> #include <QDragEnterEvent> #include <iostream> using namespace std; MyButton::MyButton(QWidget *parent) : QPushButton(parent) { setAcceptDrops (true); // <-- important } void MyButton::dragEnterEvent(QDragEnterEvent *event) { const QMimeData * data = event->mimeData(); if (data->hasColor()) { event->acceptProposedAction(); // <-- important cout << "dragEnter" << endl; } } void MyButton::dropEvent(QDropEvent *event) { const QMimeData * data = event->mimeData(); if (data->hasColor()) { QColor color = data->colorData().value <QColor> (); cout << "drop" << endl; } }