Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2011, 01:19   #1
Guzal
Форумчанин
 
Аватар для Guzal
 
Регистрация: 11.09.2010
Сообщений: 101
По умолчанию Drag&Drop

Здравствуйте, подскажите пожалуйста
мы работаем в Qt..
я знаю как менять положение картинки (dragging) ,перетаскивать ее по окну, но как добавить еще одну катринку?так чтобы обе можно было двигать по отдельности? Я создавала новыу координаты второй картинки, ее QMimeData, но у меня не получается.
вот код для одной катринки:
header file

Код:
#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
    void setImage(QImage *);

protected:
    void paintEvent (QPaintEvent *);
    void mousePressEvent (QMouseEvent *);
    void dragEnterEvent(QDragEnterEvent *);
    void dropEvent(QDropEvent *);

private:
    QImage *myimg;
    int x,y;
    bool isDrawing;
};

#endif // WIDGET_H
cpp file
Код:
#include "widget.h"
#include <QtGui>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setImage(new QImage(":/images/pic.jpg"));
    x=10;
    y=10;
    setAcceptDrops(true);
    isDrawing=true;
}


void Widget::setImage(QImage *i)
{
    if(i!=NULL) myimg =i;
}
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
    if(event->mimeData()->hasImage())
        event->acceptProposedAction();
}

void Widget::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    if(isDrawing)
        p.drawImage(x,y, *myimg);
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    QRect picRect = QRect(QPoint(x,y),myimg->size());
    if(event->button()==Qt::LeftButton && picRect.contains(event->pos()))
    {
        QDrag drag(this);
        QMimeData *mimeData = new QMimeData;
        mimeData->setImageData(*myimg);
        drag.setMimeData(mimeData);
        drag.setPixmap(QPixmap::fromImage(*myimg));
        drag.setHotSpot(QPoint(myimg->width()/2, myimg->height()/2));

        isDrawing=false;
        repaint();
        Qt::DropAction res = drag.exec();
        if(res!=Qt::MoveAction)
        {
            isDrawing = true;
            repaint();
        }

    }

}
void Widget::dropEvent(QDropEvent *event)
{
    if(event->mimeData()->hasImage())
    {
        myimg = new QImage(qvariant_cast<QImage>(event->mimeData()->imageData()));
        x=event->pos().x()-myimg->width()/2;
        y=event->pos().y()-myimg->height()/2;
        isDrawing=true;
    repaint();
    event->accept();

    }
}

Widget::~Widget()
{
    delete myimg;
}
заранее спасиибо
I'm a rebel. [I think positively].

Последний раз редактировалось Guzal; 12.04.2011 в 01:23.
Guzal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag&drop БАО Общие вопросы C/C++ 2 06.05.2010 12:17
drag&drop в listbox-e blackstersl Общие вопросы Delphi 2 03.05.2009 17:11
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04