crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QGraphicsRectItem и setPos()
lifrost
  опции профиля:
сообщение 10.3.2011, 11:48
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 4.3.2011
Из: Миасс
Пользователь №: 2468

Спасибо сказали: 0 раз(а)




Репутация:   0  


Создаю в конструкторе:

pRight = new QGraphicsRectItem;
pRight->setRect(580, 300, 20, 300);
pRight->setPen(QPen(Qt::black));
pRight->setBrush(QBrush(Qt::green));
addItem(pRight);


Хочу поменять положение своего rect, делаю следующее

void WindowScene::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        plastPos = pRight->scenePos();

        leftButton = true;
        mX = e->buttonDownScenePos(Qt::LeftButton).x();
    }
}

void WindowScene::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
    int x, y;
    x = e->scenePos().x();
    y = e->scenePos().y();

    if(leftButton)
    {
        dx = x - mX;
        dy = plastPos.y();

        pRight->setPos(dx, dy);

        sceneUpdate();
    }
}

void WindowScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *e)
{
    e->accept();
    leftButton = false;
}


Квадрат перемещается, НО! Я не понимаю, почему при повторном перемещение он "соскакивает" в первоначальную позицию?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lifrost
  опции профиля:
сообщение 14.3.2011, 14:07
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 4.3.2011
Из: Миасс
Пользователь №: 2468

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я сделал, действительно итем двигается без проблем, все нормально. Но моей основной целью было - при движение одного итема, другой должен дорисовываться....вот с последним теперь беда, как дорисовать другой итем?
Я делаю на примере квадрата - сделал четыре створки квадрата.

WindowItem::WindowItem(QGraphicsItem *parent) : QGraphicsObject(parent)
{
    setAcceptDrops(true);
}


// Левая створка
LeftGlume::LeftGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}

QRectF LeftGlume::boundingRect() const
{
     return QRectF(100, 100, 20, 500);
}

void LeftGlume::paint(QPainter *painter,
           const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->drawRect(100,100,20,500);
}

void LeftGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{

}

void LeftGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{

}

// Верхняя створка
TopGlume::TopGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}

QRectF TopGlume::boundingRect() const
{
     return QRectF(100, 100, 500, 20);
}

void TopGlume::paint(QPainter *painter,
           const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->drawRect(100,100,500,20);
}

void TopGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{

}

void TopGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{

}

// Нижняя створка
BottomGlume::BottomGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}

QRectF BottomGlume::boundingRect() const
{
     return QRectF(100, 580, 500, 20);
}

void BottomGlume::paint(QPainter *painter,
           const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->drawRect(100,580,500,20);
}

void BottomGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{

}

void BottomGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{

}

// Правая створка
RightGlume::RightGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}

QRectF RightGlume::boundingRect() const
{
     return QRectF(580, 100, 20, 500);
}

void RightGlume::paint(QPainter *painter,
           const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    painter->drawRect(580,100,20,500);
}

void RightGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        point = e->pos();
    }
}

void RightGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
    RightGlume *rightG = new RightGlume;

    int y;
    y = rightG->pos().y();

    setPos(e->scenePos().x() - point.x(), y);

    QPainter *p = new QPainter;
    p->drawArc(100,100,500,20,20,3);

    scene()->update(0,0,2000,2000);
}


// Окно квадратное
RectWindow::RectWindow(QGraphicsItem *parent)
    : WindowItem(parent)
{
    QGraphicsObject *leftItem = new LeftGlume(this);
    QGraphicsObject *rightItem = new RightGlume(this);
    QGraphicsObject *topItem = new TopGlume(this);
    QGraphicsObject *bottomItem = new BottomGlume(this);

    leftItem->setPos(leftItem->pos().x(),leftItem->pos().y());
    rightItem->setPos(rightItem->pos().x(),rightItem->pos().y());
    topItem->setPos(topItem->pos().x(),topItem->pos().x());
    bottomItem->setPos(bottomItem->pos().x(), bottomItem->pos().y());

}

QRectF RectWindow::boundingRect() const
{
    return QRectF();
}

void RectWindow::paint(QPainter *painter,
                  const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(painter);
    Q_UNUSED(option);
    Q_UNUSED(widget);
}


пока вот что получилось. На Сцене отображается квадрат, правая створка двигается, а как организовать дорисовку верхней и нижней створки ума не приложу....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- lifrost   QGraphicsRectItem и setPos()   10.3.2011, 11:48
- - abc   держи код, который работает, но это в классе итема...   12.3.2011, 21:34
- - lifrost   спасибо, значит я просто пошел не той дорогой. у м...   14.3.2011, 7:51
- - lifrost   Я сделал, действительно итем двигается без проблем...   14.3.2011, 14:07
- - abc   Вот код, двигающий левую и верхнюю грани... Надеюс...   15.3.2011, 13:31
|- - lifrost   Цитата(abc @ 15.3.2011, 15:31) Вот код, д...   15.3.2011, 14:51
- - lifrost   Что-то после нескольких дней экспериментов я понял...   24.3.2011, 10:26
- - abc   что-то я не понял, какой результат нужно получить,...   24.3.2011, 12:31
|- - lifrost   Цитата(abc @ 24.3.2011, 14:31) что-то я н...   24.3.2011, 12:45
- - abc   IT Окна. Конструктор ? установил, не запускается -...   24.3.2011, 13:48
|- - lifrost   Цитата(abc @ 24.3.2011, 15:48) IT Окна. К...   24.3.2011, 14:00
- - abc   а, да, полигон для грани это выглядит хорошо, надо...   24.3.2011, 14:21
|- - lifrost   Цитата(abc @ 24.3.2011, 16:21) а, да, пол...   24.3.2011, 14:27
- - abc   пока не знаю, что сказать, нужно пробовать, завтр...   24.3.2011, 15:09
|- - lifrost   Цитата(abc @ 24.3.2011, 17:09) пока не зн...   25.3.2011, 9:51
- - lifrost   Я тут подумал....а QGraphicsItemGroup может как-ни...   25.3.2011, 10:47
- - abc   насколько я понимаю, раз это сделает итемы единым ...   25.3.2011, 13:35
|- - lifrost   Цитата(abc @ 25.3.2011, 15:35) насколько ...   25.3.2011, 13:41
- - abc   верю на слово ))   25.3.2011, 13:47
- - lifrost   Я тут ещё подумал, по мимо всего нужно ещё и разме...   25.3.2011, 15:26
- - abc   да, сетку неплохо бы ненавязчивую. чтоб такую прог...   25.3.2011, 16:18
- - Litkevich Yuriy   Цитата(abc @ 25.3.2011, 18:18) заархивиро...   26.3.2011, 7:38
- - abc   спасибо, Юра) квадрат адекватен, только если разд...   26.3.2011, 12:05
|- - lifrost   Цитата(abc @ 26.3.2011, 14:05) спасибо, Ю...   28.3.2011, 7:24
- - abc   я пытался добиться, чтобы, при раздвигании, грани ...   28.3.2011, 9:55
|- - lifrost   Цитата(abc @ 28.3.2011, 11:55) я пытался ...   28.3.2011, 10:31
- - abc   ИТ окна почти запустились - оказалось, что нужно б...   29.3.2011, 9:51
|- - lifrost   Цитата(abc @ 29.3.2011, 11:51) ИТ окна по...   29.3.2011, 10:34
- - abc   супер окна тоже не запускаются ставил бесплатную ...   29.3.2011, 20:19
|- - lifrost   Цитата(abc @ 29.3.2011, 22:19) супер окна...   30.3.2011, 9:28
- - lifrost   Кстати, есть ещё идея со сигналами/слотами...Это я...   30.3.2011, 9:59
- - abc   в реализации new Arс ты столкнулся с той же пробле...   30.3.2011, 11:49
|- - lifrost   Цитата(abc @ 30.3.2011, 13:49) в реализац...   31.3.2011, 7:09
- - abc   я проснулся ночью в поту! я полдня мучился, не...   31.3.2011, 9:57
|- - lifrost   Цитата(abc @ 31.3.2011, 11:57) я проснулс...   31.3.2011, 10:20
- - abc   2) задаёшь новые координаты вершин, затем устанавл...   31.3.2011, 11:43
|- - lifrost   Цитата(abc @ 31.3.2011, 13:43) 2) задаёшь...   1.4.2011, 7:33
- - abc   пусть двигается, но изначально строй окно по задан...   1.4.2011, 11:52
- - lifrost   Цитата(abc @ 1.4.2011, 13:52) пусть двига...   1.4.2011, 12:01


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


11 чел. читают эту тему (гостей: 11, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 17:03