DizL
20th October 2015, 13:09
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:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene* scene = new QGraphicsScene;
QGraphicsWidget *textEdit = scene->addWidget(new QTextEdit("textedit"));
QGraphicsWidget *pushButton1 = scene->addWidget(new QPushButton("pushbutton1"));
QGraphicsWidget *pushButton2 = scene->addWidget(new QPushButton("pushbutton2"));
QGraphicsWidget *pushButton3 = scene->addWidget(new myGraphicsWidget(0));
QGraphicsWidget *pushButton4 = scene->addWidget(new myGraphicsWidget(0));
pushButton4->setAcceptDrops(true);
QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
layout->addItem(textEdit);
layout->addItem(pushButton1);
layout->addItem(pushButton2);
layout->addItem(pushButton3);
layout->addItem(pushButton4);
QGraphicsWidget *form = new QGraphicsWidget;
form->setLayout(layout);
scene->addItem(form);
QGraphicsView *view = new QGraphicsView(this);
view->setScene(scene);
view->setAcceptDrops(true);
QVBoxLayout* layoucik = new QVBoxLayout();
layoucik->addWidget(new myGraphicsWidget(0));
layoucik->addWidget(new myGraphicsWidget(0));
layoucik->addWidget(view);
QWidget* widget = new QWidget;
widget->setLayout(layoucik);
this->setCentralWidget(widget);
}
MainWindow::~MainWindow()
{
delete ui;
}
and
#include "mygraphicswidget.h"
#include <QDrag>
#include <QMimeData>
myGraphicsWidget::myGraphicsWidget(QWidget* parent) : QPushButton("test", parent)
{
setAcceptDrops(true);
}
void myGraphicsWidget::mousePressEvent(QMouseEvent *event)
{
QPoint hotSpot = event->pos();
QMimeData *mimeData = new QMimeData;
mimeData->setText("aaabbcc");
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setHotSpot(hotSpot);
Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
}
void myGraphicsWidget::mouseMoveEvent(QMouseEvent *event)
{
}
void myGraphicsWidget::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasText())
{
event->accept();
}
}
void myGraphicsWidget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasText())
{
this->setText("aaa"+event->mimeData()->text());
}
}
regards,
DizL
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:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene* scene = new QGraphicsScene;
QGraphicsWidget *textEdit = scene->addWidget(new QTextEdit("textedit"));
QGraphicsWidget *pushButton1 = scene->addWidget(new QPushButton("pushbutton1"));
QGraphicsWidget *pushButton2 = scene->addWidget(new QPushButton("pushbutton2"));
QGraphicsWidget *pushButton3 = scene->addWidget(new myGraphicsWidget(0));
QGraphicsWidget *pushButton4 = scene->addWidget(new myGraphicsWidget(0));
pushButton4->setAcceptDrops(true);
QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
layout->addItem(textEdit);
layout->addItem(pushButton1);
layout->addItem(pushButton2);
layout->addItem(pushButton3);
layout->addItem(pushButton4);
QGraphicsWidget *form = new QGraphicsWidget;
form->setLayout(layout);
scene->addItem(form);
QGraphicsView *view = new QGraphicsView(this);
view->setScene(scene);
view->setAcceptDrops(true);
QVBoxLayout* layoucik = new QVBoxLayout();
layoucik->addWidget(new myGraphicsWidget(0));
layoucik->addWidget(new myGraphicsWidget(0));
layoucik->addWidget(view);
QWidget* widget = new QWidget;
widget->setLayout(layoucik);
this->setCentralWidget(widget);
}
MainWindow::~MainWindow()
{
delete ui;
}
and
#include "mygraphicswidget.h"
#include <QDrag>
#include <QMimeData>
myGraphicsWidget::myGraphicsWidget(QWidget* parent) : QPushButton("test", parent)
{
setAcceptDrops(true);
}
void myGraphicsWidget::mousePressEvent(QMouseEvent *event)
{
QPoint hotSpot = event->pos();
QMimeData *mimeData = new QMimeData;
mimeData->setText("aaabbcc");
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setHotSpot(hotSpot);
Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
}
void myGraphicsWidget::mouseMoveEvent(QMouseEvent *event)
{
}
void myGraphicsWidget::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasText())
{
event->accept();
}
}
void myGraphicsWidget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasText())
{
this->setText("aaa"+event->mimeData()->text());
}
}
regards,
DizL