#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include #include void MainWindow::on_pushButton_pressed () { QDrag * drag = new QDrag (this); QMimeData * mime = new QMimeData; mime->setText ("Hello"); mime->setColorData (QColor ("red")); drag->setMimeData (mime); QColor c = mime->colorData().value(); QPixmap pixmap (32, 32); pixmap.fill (Qt::white); QPainter q (&pixmap); q.setPen (c); q.setBrush (c); q.drawEllipse (0, 0, 31, 31); drag->setPixmap (pixmap); drag->setHotSpot(QPoint (10, 10)); Qt::DropAction action = drag->exec (Qt::CopyAction | Qt::MoveAction | Qt::LinkAction, Qt::LinkAction); if (action == Qt::MoveAction) ui->pushButton->setText (""); } void MainWindow::on_pushButton_2_pressed() { QDrag * drag = new QDrag (this); QMimeData * mime = new QMimeData; mime->setText ("Something"); mime->setColorData (QColor ("green")); drag->setMimeData (mime); drag->exec (); } class MyButton : public QPushButton { protected: void dragEnterEvent (QDragEnterEvent * event) { const QMimeData * mime = event->mimeData (); if (mime->hasText () || mime->hasColor ()) event->setAccepted (true); } void dropEvent (QDropEvent * event) { const QMimeData * mime = event->mimeData (); if (mime->hasText ()) this->setText (mime->text()); if (mime->hasColor()) { QColor c = mime->colorData().value(); QPalette p = this->palette (); // p.setColor (QPalette::Button, c); p.setColor (QPalette::ButtonText, c); this->setPalette (p); QPixmap pixmap (32, 32); pixmap.fill (Qt::transparent); QPainter q (&pixmap); q.setPen (c); q.setBrush (c); // q.drawLine (0, 0, 31, 31); q.drawEllipse (0, 0, 31, 31); QIcon icon (pixmap); this->setIcon (icon); } event->setDropAction(Qt::MoveAction); event->setAccepted(true); } }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); MyButton * b = new MyButton; b->setText ("My Button"); b->setParent (this); b->setGeometry (200, 100, 200, 100); b->setAcceptDrops (true); } MainWindow::~MainWindow() { delete ui; }