Russian Qt Forum
Ноябрь 01, 2024, 08:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter c drag and drop  (Прочитано 4740 раз)
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();
  }
Записан
ufna
Гость
« Ответ #1 : Апрель 24, 2011, 16:01 »

в принципе не верное направление.

все проще. Лови нажатие мыши, перемещение мыши, отпускание мыши. в зависимости от этого рисуй элемент там, где он находится в текущий момент.
Записан
zaych361
Гость
« Ответ #2 : Апрель 24, 2011, 16:41 »

в принципе не верное направление.

все проще. Лови нажатие мыши, перемещение мыши, отпускание мыши. в зависимости от этого рисуй элемент там, где он находится в текущий момент.
а если их будет 16?! воспользоваться эти же принципом?!
Записан
ufna
Гость
« Ответ #3 : Апрель 24, 2011, 16:58 »

конечно. в чем проблема? Унифицируйте объекты до класса "перемещаемый айтем".
Записан
zaych361
Гость
« Ответ #4 : Апрель 25, 2011, 13:14 »

хорошо б на примерчик взглянуть, а то не могу сообразить Злой
Записан
ufna
Гость
« Ответ #5 : Апрель 26, 2011, 07:20 »

в личку стукни, ближе к выходным смогу скинуть
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Апрель 26, 2011, 09:48 »

А почему не смотришь в сторону QGraphicsView?
Там всё уже сделано для этого.
См. qtdemo/Graphics View/Elastic Nodes|Ported Canvas.
Записан

Qt 5.11/4.8.7 (X11/Win)
zaych361
Гость
« Ответ #7 : Апрель 28, 2011, 11:44 »

А почему не смотришь в сторону QGraphicsView?
Там всё уже сделано для этого.
См. qtdemo/Graphics View/Elastic Nodes|Ported Canvas.
хорошая идея, но не получается. Можешь показать или хотя бы детально обьяснить?!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Апрель 28, 2011, 12:20 »

Цитировать
хорошая идея, но не получается.
Не получается что?
Цитировать
Можешь показать или хотя бы детально обьяснить?!
В исходниках всё есть.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.