Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Разуев Максим от Июль 01, 2007, 15:54



Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: Разуев Максим от Июль 01, 2007, 15:54
У меня перехватывается как mousepressevent, так и contextmenuevent. В mousepressevent уставляется вид курсора в зависимости от того на какой обьект кликнули. Но если в контекстном меню ни один пункт не выберается то происходит странная вещь. QGraphicsView перестает реагировать на изменение курсора. Действия работают (например перетаскивание обьекта), но изменение курсора которое происходит там же где и действие не работает Все восстанавливается если вывести курсор за пределы QGraphicsView.(Похоже когда происходит автоматическое изменение курсора). Это что баг Qt или я чтото недопонимаю.


Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: Racheengel от Июль 01, 2007, 16:15
судя по описанию проблемы - баг Qt.
имхо.


Название: Re: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: QCasper от Июль 01, 2007, 21:52
Цитата: "Разуев Максим"
У меня перехватывается как mousepressevent, так и contextmenuevent. В mousepressevent уставляется вид курсора в зависимости от того на какой обьект кликнули. Но если в контекстном меню ни один пункт не выберается то происходит странная вещь. QGraphicsView перестает реагировать на изменение курсора. Действия работают (например перетаскивание обьекта), но изменение курсора которое происходит там же где и действие не работает Все восстанавливается если вывести курсор за пределы QGraphicsView.(Похоже когда происходит автоматическое изменение курсора). Это что баг Qt или я чтото недопонимаю.


У меня подобная лажа.


Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: Racheengel от Июль 01, 2007, 23:35
значить, точно баг. а в 4.3 как, мож починили уже?


Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: goer от Июль 02, 2007, 09:25
2Racheengel:
Да у тебя через топик ответы: баг кути. баг кути. баг кути :)))


По проблеме: может быть что то с последжовательнсотью event-ов? Например они вызываются не в том порядке как ты того ожидаешь? Или такого порядка нет вообще.


Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: Racheengel от Июль 02, 2007, 10:13
Если проблема проявляется у нескольких человек сразу - это баг библиотеки... Я сам на столько багов нарывался, помню, кучу багрепортов поотсылал, Тролли подтвердили баги и обещали в 4.3 полечить.


Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: Разуев Максим от Июль 02, 2007, 12:04
Насчет последовательности:
Я пытался сделать вызов контекстного меню прямо из mousemoveevent, не переопределяя contextmenuevent. Но в результате после вызова menu->exec(popup пробовал), попытка изменить курсор вызввает вылет программы.
Я думал насчет последовательности event-ов. Если так то как это отследить, очень сложна отладка.


Название: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView
Отправлено: QCasper от Июль 04, 2007, 20:21
А у меня курсор застревает так.

Я создал фильтр для QGraphicsItem, то есть унаследовался от QGraphicsItem и переопределил метод sceneEventFilter. Обьъект этого фильтра устанавливается сцене и каждому новому итему. В фильтре я обрабатываю нажатие левой кнопки мыши и устанавливаю по нему курсор:

Код:

bool FilterItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event) {
if (event->type() == QEvent::GraphicsSceneMousePress) {
   QGraphicsSceneMouseEvent *e = static_cast<QGraphicsSceneMouseEvent*>(event);  
   if (e->button() == Qt::LeftButton)
      watched->setCursor(Qt::ClosedHandCursor);
   return QGraphicsItem::sceneEventFilter(watched, event);
}


Так вот после того как фигура ClosedHandCursor установлена итему, она должна быть видна только, когда указатель мыши находится над этим итемом, согласно асистанту. Но, увы, даже если вывести указатель мыши за его пределы, фигура остается ClosedHandCursor, хотя должна вернуться обратно в ArrowCursor. Самое интересное, что иногда, работает как надо, причём это "иногда" непонятно от чего зависит - можно два раза запустить прогу, и увидеть два разных результата.

добавлено спустя 6 часов 48 минут:

 Дошли руки перейти на Qt 4.3.0 и эта проблема отпала вроде как. Похоже Racheengel прав - действительно баг был, который в текущей версии пофиксили. Максим, попробуй в 4.3.0 собрать, любопытно, у тебя прокатит или нет.