Доброе время суток! В текущем проекте множество рисованный элементов нужно будет перетаскивать. Решил попробывать на простом овале. 8 ошибок. Как я понимаю, проблема в
mimeData->setText();
mimeData->setImageData(image);
drag->setMimeData(mimeData);
drag->setPixmap(iconPixmap);
Подскажите правильную реализацию (или угостите ссылкой).Привожу текущий листинг. Заранее спасибо
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
#include <QImage>
#include <QWidget>
#include <QMimeData>
#include <QDrag>
#include <QDragMoveEvent>
#include <QDropEvent>
#include <QListWidget>
#include <QMouseEvent>
#include <QListWidget>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void QWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
painter.drawEllipse(20, 100, 300, 200);
painter.end();
};
class QDragEnterEvent;
class QDropEvent;
class DragWidget : public QWidget
{
public:
DragWidget(QWidget *parent = 0);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
void mousePressEvent(QMouseEvent *event);
};
void QWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText();
mimeData->setImageData(image);
drag->setMimeData(mimeData);
drag->setPixmap(iconPixmap);
Qt::DropAction dropAction = drag->exec();
event->accept();
}
}
void QWidget::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasText() || event->mimeData()->hasImage())
event->acceptProposedAction();
}
void QWidget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasText())
dataLabel->setText(event->mimeData()->text());
else if (event->mimeData()->hasImage()) {
QVariant imageData = event->mimeData()->imageData();
dataLabel->setPixmap(qvariant_cast<QPaintEvent>(imageData));
}
event->acceptProposedAction();
}