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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.2.3] Проблема с контекстным меню в QGraphicsView  (Прочитано 6765 раз)
Разуев Максим
Гость
« : Июль 01, 2007, 15:54 »

У меня перехватывается как mousepressevent, так и contextmenuevent. В mousepressevent уставляется вид курсора в зависимости от того на какой обьект кликнули. Но если в контекстном меню ни один пункт не выберается то происходит странная вещь. QGraphicsView перестает реагировать на изменение курсора. Действия работают (например перетаскивание обьекта), но изменение курсора которое происходит там же где и действие не работает Все восстанавливается если вывести курсор за пределы QGraphicsView.(Похоже когда происходит автоматическое изменение курсора). Это что баг Qt или я чтото недопонимаю.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Июль 01, 2007, 16:15 »

судя по описанию проблемы - баг Qt.
имхо.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
QCasper
Гость
« Ответ #2 : Июль 01, 2007, 21:52 »

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


У меня подобная лажа.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Июль 01, 2007, 23:35 »

значить, точно баг. а в 4.3 как, мож починили уже?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
goer
Гость
« Ответ #4 : Июль 02, 2007, 09:25 »

2Racheengel:
Да у тебя через топик ответы: баг кути. баг кути. баг кути Улыбающийся))


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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Июль 02, 2007, 10:13 »

Если проблема проявляется у нескольких человек сразу - это баг библиотеки... Я сам на столько багов нарывался, помню, кучу багрепортов поотсылал, Тролли подтвердили баги и обещали в 4.3 полечить.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Разуев Максим
Гость
« Ответ #6 : Июль 02, 2007, 12:04 »

Насчет последовательности:
Я пытался сделать вызов контекстного меню прямо из mousemoveevent, не переопределяя contextmenuevent. Но в результате после вызова menu->exec(popup пробовал), попытка изменить курсор вызввает вылет программы.
Я думал насчет последовательности event-ов. Если так то как это отследить, очень сложна отладка.
Записан
QCasper
Гость
« Ответ #7 : Июль 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 собрать, любопытно, у тебя прокатит или нет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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