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;
}


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


Участник
**

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

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




Репутация:   4  


держи код, который работает, но это в классе итема, а не сцены:
void TextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
point=event->pos();
}
void TextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
setPos(event->scenePos()-point);
}


сложный код ты наворотил
mouseReleaseEvent тебе не нужен, т.к. if(leftButton) тебе не нужно

подумай, стоит ли делать свой класс сцены, чтобы забубенить движение итема? если ты, конечно, только для этого влез в класс сцены... К тому же, куда не ткнёшь на сцене, твой итем будет двигаться... а ты ведь хочешь, чтобы он двигался только, когда на него тыкаешь... тут тебе понадобится проверка "а под мышью ли итем"... а если будешь реализовывать поведение итема в классе итема, таких проблем не будет... всякому коду своё место)

Сообщение отредактировал abc - 12.3.2011, 22:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




RSS Текстовая версия Сейчас: 18.2.2025, 11:00