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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: перемещение айтемов мышкой в QGraphicsView  (Прочитано 6013 раз)
kdm
Гость
« : Январь 29, 2011, 05:04 »

Подскажите, как правильно перемещать айтемы внутри QGraphicsView мышкой. Смотрел примеры Qt, но там много кода, выполняющего разные действия, где что не подсек. Какой правильный подход? Раньше таких задач еще не делал.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Январь 29, 2011, 09:49 »

Установи у них флаги выделения и перемещения.

    setFlag(QGraphicsItem::ItemIsMovable, true);
    setFlag(QGraphicsItem::ItemIsSelectable, true);
Записан
kdm
Гость
« Ответ #2 : Февраль 20, 2011, 19:56 »

Все работает. Сейчас уже пишу другую программу, в которой требуется тоже самое. Но сейчас айтемы выделяются, но не двигаются, в чем может быть дело?

Код:
void MainWindow :: addItem ()
{
    QGraphicsPixmapItem* GraphicsItem;
    GraphicsItem =
scene()->addPixmap(QPixmap("Pixmaps/Dialog/image.png"));
   
    GraphicsItem->setFlag(QGraphicsItem::ItemIsMovable, true);
    GraphicsItem->setFlag(QGraphicsItem::ItemIsSelectable, true);
}
Все происходит в MainWindow (class MainWindow : public QGraphicsView).
Из отличительных особенностей от той программы (в которой все работало) есть только то, что MouseTracking включен и определен метод void mouseMove(QMouseEvent*). Хотя как это может сказаться? Непонимающий Ничего ни с GraphicsView ни GraphicsScene не делаю. Все что касается их в конструкторе MainWindow ():
Код:
    setScene(new QGraphicsScene(this));
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setMouseTracking(true);
« Последнее редактирование: Февраль 20, 2011, 20:00 от kdm » Записан
kdm
Гость
« Ответ #3 : Февраль 22, 2011, 13:20 »

определен метод void mouseMove(QMouseEvent*). Хотя как это может сказаться? Непонимающий
Удивительно, но после того как я закоментировал метов mouseMoveEvent и mousePressEvent все стало работать. Может баг Qt, я использую старый 2009.03.

Но оказалось все дело в том, что в переопределенном mouseMoveEvent надо вызывать mouseMoveEvent из базового класса QGraphicsView:
Код:
void MainWindowWidget :: mouseMoveEvent (QMouseEvent* event)
{
    ... do something
    QGraphicsView::mouseMoveEvent(event);
}
« Последнее редактирование: Февраль 22, 2011, 14:01 от kdm » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Февраль 22, 2011, 15:03 »

Цитировать
Но оказалось все дело в том, что в переопределенном mouseMoveEvent надо вызывать mouseMoveEvent из базового класса QGraphicsView:
Ну дык, конечно, без этого вызова до QGraphicsView не доходили нажатия.
Коли перегружаете методы базового класса надо всегда иметь в виду, что вы можете заломать функционал базового класса.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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