Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: zaych361 от Апрель 24, 2011, 15:55



Название: QPainter c drag and drop
Отправлено: zaych361 от Апрель 24, 2011, 15:55
Доброе время суток! В текущем проекте множество рисованный элементов нужно будет перетаскивать. Решил попробывать на простом овале. 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();
  }


Название: Re: QPainter c drag and drop
Отправлено: ufna от Апрель 24, 2011, 16:01
в принципе не верное направление.

все проще. Лови нажатие мыши, перемещение мыши, отпускание мыши. в зависимости от этого рисуй элемент там, где он находится в текущий момент.


Название: Re: QPainter c drag and drop
Отправлено: zaych361 от Апрель 24, 2011, 16:41
в принципе не верное направление.

все проще. Лови нажатие мыши, перемещение мыши, отпускание мыши. в зависимости от этого рисуй элемент там, где он находится в текущий момент.
а если их будет 16?! воспользоваться эти же принципом?!


Название: Re: QPainter c drag and drop
Отправлено: ufna от Апрель 24, 2011, 16:58
конечно. в чем проблема? Унифицируйте объекты до класса "перемещаемый айтем".


Название: Re: QPainter c drag and drop
Отправлено: zaych361 от Апрель 25, 2011, 13:14
хорошо б на примерчик взглянуть, а то не могу сообразить >:(


Название: Re: QPainter c drag and drop
Отправлено: ufna от Апрель 26, 2011, 07:20
в личку стукни, ближе к выходным смогу скинуть


Название: Re: QPainter c drag and drop
Отправлено: GreatSnake от Апрель 26, 2011, 09:48
А почему не смотришь в сторону QGraphicsView?
Там всё уже сделано для этого.
См. qtdemo/Graphics View/Elastic Nodes|Ported Canvas.


Название: Re: QPainter c drag and drop
Отправлено: zaych361 от Апрель 28, 2011, 11:44
А почему не смотришь в сторону QGraphicsView?
Там всё уже сделано для этого.
См. qtdemo/Graphics View/Elastic Nodes|Ported Canvas.
хорошая идея, но не получается. Можешь показать или хотя бы детально обьяснить?!


Название: Re: QPainter c drag and drop
Отправлено: GreatSnake от Апрель 28, 2011, 12:20
Цитировать
хорошая идея, но не получается.
Не получается что?
Цитировать
Можешь показать или хотя бы детально обьяснить?!
В исходниках всё есть.