Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtист от Июль 06, 2009, 15:59



Название: Курсор в QGraphicsView
Отправлено: qtист от Июль 06, 2009, 15:59
Создана графическая сцена,туда кидается итем,у него устанавливается
свой курсор:

Код
C++ (Qt)
class Item : public QGraphicsItem
{
public:
   Item(QGraphicsItem *parent = 0)
       : QGraphicsItem(parent)
  {  
      ......
       setCursor(Qt::OpenHandCursor);
   }
......
}

В некотороых случаях в сцене переопределяется курсор:
Код
C++ (Qt)
void ObModule::on_toolButton_pressed()
{  
   ui.graphicsView->setCursor(QCursor(QPixmap(":/Resources/prizma16.ico")));
}
//восстанавливается стандартная стрелка
void ObModule::on_toolButton_3_pressed()
{
     ui.graphicsView->unsetCursor();
}

Так вот,например, установлен курсор с prizma16.ico,двигаем мышку над итемом - появляется
OpenHandCursor. Затем восстанавливаю стандартный курсор - и пофигу:курсор с prizma16.ico.
А вот ежели мышку над итемом не двигаем - всё восстанавливается.
Чё не так делаю? :'(


Название: Re: Курсор в QGraphicsView
Отправлено: mal от Июль 07, 2009, 11:31
не факт что это то , что вам нужно, но у себя я сделал так:
Код:
void CItem::hoverEnterEvent ( QGraphicsSceneHoverEvent * event )
{
...
emit cursorOver(true);
}

void CItem::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
{
...
emit cursorOver(false);
}
в виджете где у вас сцена и вью, при создании айтема вяжете эти сигналы с соответствующими слотами, и управление сменой курсора происходит в одном виджете.
И не забудьте при создании айтема разрешить ему принимать hover-события
Код:
CItem *p_item;
...
p_item->setAcceptsHoverEvents(true);

Не могу сказать предложенная схема айс это или не айс, но меня такое решение удовлетворило в свое время.