2013-06-04 4 views
1

У меня есть простой QDialog, содержащий только QComboBox и QPlainTextEdit, содержащаяся в QGraphicsProxyWidget. Обычно сфокусированный QComboBox отвечает на wheelEvent s, меняя его currentIndex. Однако в этом QGraphicsProxyWidget ответа нет.QComboBox, часть простого QDialog, завернутый в QGraphicsProxyWidget, не реагирует на событие колеса мыши

В качестве эксперимента я также попытался поймать wheelEvent, либо в QComboBox, либо в QGraphicsProxyWidget, но он тоже никогда не называется.

Как я могу получить встроенный QComboBox для ответа на события колесика мыши? Первый приз, если вы знаете, как он реагирует на события мыши, когда отображается всплывающий список.

+0

Работает ли она, когда мышь находится непосредственно над 'QComboBox'? – cmannett85

+0

Это не работает, когда оно прямо закончилось. Он также не работает, если я на самом деле сначала нажимаю на него, чтобы он выскочил, а также нет, если я вытащил всплывающее окно, выбирая элемент или нажав escape. (и большое спасибо за изменения!) –

ответ

2

Если она работает, то путь, с которым событие будет распространяться является:

QGraphicsView::wheelEvent

QGraphicsScene::wheelEvent

QGraphicsWidget::sceneEvent (прокси-виджета родительский класс)

QGraphicsItem::sceneEvent (прокси родителя-родителя виджетов)

QGraphicsProxyWidget::wheelEvent

QComboBox::wheelEvent

Вы уже знаете, что это не становится, насколько QGraphicsProxyWidget::wheelEvent, так что если бы я был тобой, я бы пошел дальше по цепочке, чтобы найти, где это застрять.

Вы переопределяете wheelEvent где-нибудь еще, как в QGraphicsView или QGraphicsScene? Если это так, вероятно, это источник вашей проблемы, поскольку эти классы должны передавать события своим детям.

+0

Genius! Спасибо, я забыл посмотреть в моем производном QGraphicsView. У меня есть wheelEvent, но он вызывает event.ignore() в этом конкретном случае (я дважды проверял), и все-таки моя combobox не получает его. Однако, когда я полностью отключил QGraphicsView.wheelEvent, проблема QComboBox начала работать! Таким образом, ignore() как-то не работает. Есть еще идеи? –

+0

Вместо вызова e.ignore я вызываю parentEvent() и теперь все работает. Еще раз спасибо за применение ваших дедуктивных полномочий к моей проблеме! –

+0

Да, это то, что я предложил бы, если бы увидел ваш ответ вовремя. :) Рад, что смог помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^