Russian Qt Forum
Ноябрь 01, 2024, 23:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неадекватно работает QGraphicsItem::contains  (Прочитано 2479 раз)
jerdeks
Гость
« : Сентябрь 13, 2011, 16:57 »

Есть главные айтем - main_item. На нем лежат остальные объекты. Хочу их перетаскивать. Функции itemAt недостаточно, потому что она определяет не точную границу фигуры, а прямоугольник, в который она вписана. Ну то есть элипс например таскается за несуществующий угол. Функция contains определяет границы правильно, но иногда возвращает false, даже если тыкаю явно в центр фигуры 0_о Собственно, в этом вся проблема - то таскаются айтемы, то нет. Объясните, что я не так делаю, пожалуйста Улыбающийся
lockScene - чтобы таскать main_item, собственно для вопроса это не нужно

Код
C++ (Qt)
void MyScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) {
   switch (mouseEvent->button()) {
   case Qt::LeftButton :
       if ((curItem = itemAt(mouseEvent->scenePos())) &&
           curItem->contains(mouseEvent->scenePos()) &&
           curItem != view->main_item)
           lockCurItem = true;
       lockScene = !lockCurItem;
       break;
   }
}
 

А, да. view это static_cast<QGraphicsView*>(this->parent)
« Последнее редактирование: Сентябрь 13, 2011, 21:45 от jerdeks » Записан
iroln
Гость
« Ответ #1 : Октябрь 07, 2011, 23:02 »

Код:
QList<QGraphicsItem *> QGraphicsScene::items ( const QPointF & pos, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform & deviceTransform = QTransform() ) const

Флаг ItemSelectionMode устанавливаете в ContainsItemShape

Единственное, этот метод возвращает список элементов. Надо потом из списка выбрать (найти) нужный. И ещё он для сцены, то есть надо делать преобразование координат pos в координаты сцены если pos в координатах вида.
« Последнее редактирование: Октябрь 07, 2011, 23:07 от iroln » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 20.