QGraphicsLineItem, багофича |
Здравствуйте, гость ( Вход | Регистрация )
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, а вроде как не должен, следуя логике выше |
|
|
Текстовая версия | Сейчас: 30.5.2024, 1:17 |