Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QGraphicsLineItem, багофича
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
Алексей1153
у меня произведён класс от QGraphicsLineItem, в конструкторе установлен флаг перетаскивания

setFlag(ItemIsMovable,true);

то есть, перетаскивается линия штатно, без фокусов и выкрутасов.

Ещё примечание - после задания линии экземпляру класса QGraphicsLineItem, какая бы линия не была, метод pos() возвращает (0,0) - видимо, особенность работы класса.

Да и пусть, в общем-то. Но после перетаскивания линии у неё pos() начинает возвращать полученное смещение, после чего всё вроде бы отображается правильно, но при хватании линии она отображается с этим же смещением (именно во время схваченности и перетаскивания).

Вылечил так - в mouseReleaseEvent задаю setPos(0,0) принудительно. После этого всё ок

Так это фича или бага ?
ViGOur
Цитата
QPointF QGraphicsItem::pos () const

Возвращает положение элемента в родительских координатах. Если у элемента нет родителя, положение задаётся в координатах сцены.

Позиция элемента описывает ее базис (локальные координаты (0, 0)) в родительских координатах; эта функция возвращает тоже что и mapToParent(0, 0).

Для удобства вы также можете вызвать scenePos() для определения позиции элемента в координатах сцены вне зависимости от его родителя.
Как я понял из выше написанного, это нормально.
Если я конечно же правильно понял! :)
Алексей1153
нет, совсем ненормально ) В случае с "простым" QGraphicsItem - всё отлично работает, pos меняется ожидаемои никаких проблем при перетаскивании не возникает. А вот у QGraphicsLineItem - если принудительно не вернуть значение pos в 0,0 , то начинаются чудеса.

Это связано, мне думается, с тем, что линия (возвращаемая потом методом line() ) задаётся в координатах сцены, а поскольку координаты внутри объекта относительные, то смещение родительской части класса QGraphicsLineItem , то есть QGraphicsItem::pos , должно быть 0,0 . Сам QGraphicsLineItem , я полагаю, всегда начинается в 0,0, но он весь прозрачен для мыши и пикселов, кроме нарисованной на нём линии (которая теперь вполне вправе иметь координаты сцены, поскольку начало сцены и объекта совпадают).

Ошибка именно в том, что при перетаскивании объекта линии у неё смещается pos, а вроде как не должен, следуя логике выше
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.