crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QGraphicsLineItem, багофича
Алексей1153
  опции профиля:
сообщение 13.3.2013, 22:13
Сообщение #1


фрилансер
******

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

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




Репутация:   34  


у меня произведён класс от QGraphicsLineItem, в конструкторе установлен флаг перетаскивания

setFlag(ItemIsMovable,true);

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

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

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

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

Так это фича или бага ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 19.3.2013, 13:19
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Цитата
QPointF QGraphicsItem::pos () const

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

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

Для удобства вы также можете вызвать scenePos() для определения позиции элемента в координатах сцены вне зависимости от его родителя.
Как я понял из выше написанного, это нормально.
Если я конечно же правильно понял! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.3.2013, 7:32
Сообщение #3


фрилансер
******

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

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




Репутация:   34  


нет, совсем ненормально ) В случае с "простым" QGraphicsItem - всё отлично работает, pos меняется ожидаемои никаких проблем при перетаскивании не возникает. А вот у QGraphicsLineItem - если принудительно не вернуть значение pos в 0,0 , то начинаются чудеса.

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

Ошибка именно в том, что при перетаскивании объекта линии у неё смещается pos, а вроде как не должен, следуя логике выше
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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