I've got QMainWindow, QGraphicsScene, QPushButton.
The problem is drag&drop only works for QPushButtons which are in QMainWindow, not for QPushButtons in QGraphicsScene.
Any hints?
Maybe i should to something with QGraphicsProxyWidget and dragEnterEvent(QGraphicsSceneDragDropEvent * event), but how?

Here is my code:
Qt Code:
  1. MainWindow::MainWindow(QWidget *parent) :
  2. QMainWindow(parent),
  3. ui(new Ui::MainWindow)
  4. {
  5. ui->setupUi(this);
  6.  
  7. QGraphicsWidget *textEdit = scene->addWidget(new QTextEdit("textedit"));
  8. QGraphicsWidget *pushButton1 = scene->addWidget(new QPushButton("pushbutton1"));
  9. QGraphicsWidget *pushButton2 = scene->addWidget(new QPushButton("pushbutton2"));
  10. QGraphicsWidget *pushButton3 = scene->addWidget(new myGraphicsWidget(0));
  11. QGraphicsWidget *pushButton4 = scene->addWidget(new myGraphicsWidget(0));
  12. pushButton4->setAcceptDrops(true);
  13.  
  14. QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
  15.  
  16. layout->addItem(textEdit);
  17. layout->addItem(pushButton1);
  18. layout->addItem(pushButton2);
  19. layout->addItem(pushButton3);
  20. layout->addItem(pushButton4);
  21.  
  22. QGraphicsWidget *form = new QGraphicsWidget;
  23. form->setLayout(layout);
  24. scene->addItem(form);
  25.  
  26. QGraphicsView *view = new QGraphicsView(this);
  27. view->setScene(scene);
  28. view->setAcceptDrops(true);
  29.  
  30. QVBoxLayout* layoucik = new QVBoxLayout();
  31. layoucik->addWidget(new myGraphicsWidget(0));
  32. layoucik->addWidget(new myGraphicsWidget(0));
  33. layoucik->addWidget(view);
  34.  
  35. QWidget* widget = new QWidget;
  36. widget->setLayout(layoucik);
  37.  
  38. this->setCentralWidget(widget);
  39. }
  40.  
  41. MainWindow::~MainWindow()
  42. {
  43. delete ui;
  44. }
To copy to clipboard, switch view to plain text mode 

and

Qt Code:
  1. #include "mygraphicswidget.h"
  2. #include <QDrag>
  3. #include <QMimeData>
  4.  
  5.  
  6. myGraphicsWidget::myGraphicsWidget(QWidget* parent) : QPushButton("test", parent)
  7. {
  8. setAcceptDrops(true);
  9. }
  10.  
  11. void myGraphicsWidget::mousePressEvent(QMouseEvent *event)
  12. {
  13. QPoint hotSpot = event->pos();
  14. QMimeData *mimeData = new QMimeData;
  15. mimeData->setText("aaabbcc");
  16.  
  17. QDrag *drag = new QDrag(this);
  18. drag->setMimeData(mimeData);
  19. drag->setHotSpot(hotSpot);
  20.  
  21. Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
  22. }
  23.  
  24. void myGraphicsWidget::mouseMoveEvent(QMouseEvent *event)
  25. {
  26.  
  27. }
  28.  
  29. void myGraphicsWidget::dragEnterEvent(QDragEnterEvent *event)
  30. {
  31. if (event->mimeData()->hasText())
  32. {
  33. event->accept();
  34. }
  35. }
  36.  
  37.  
  38. void myGraphicsWidget::dropEvent(QDropEvent *event)
  39. {
  40. if (event->mimeData()->hasText())
  41. {
  42. this->setText("aaa"+event->mimeData()->text());
  43. }
  44. }
To copy to clipboard, switch view to plain text mode 

regards,
DizL