Название: абстрактный виджет, управляемый через картинку себя. не передаются события детям Отправлено: ieroglif от Сентября 21, 2011, 04:09 Хочу как-то просто и удобно использовать Qt виджеты в 3д графике.
Для этого решил отрисовывать виджет в картинку (прекрасно решается через QWidget::render()), эту картинку натягивать как текстуру на плоскость в 3д пространстве. Что бы это было удобно, решил написать свой абстрактный класс виджета, от которого уже наследовать необходимый мне (что бы нужный виджет можно было легко сделать в QtDesigner, запрограммировать и проверить его поведение, и простым наследованием пустить его в 3д) Однако, прежде чем приступать к 3д, начинаю с 2д - т.е. "картинку виджета" рисую на другом QWidget через его paintEvent() метод. Виджет отлично рисуется. Вопросы "трассировки" координат пока свёл к минимуму - рисую виджет в 0:0 точке. В последствии, конечно, это будет дописываться отдельно, однако для текущего момента - достаточно. виджет рисуется точно там же, где находился бы если был бы "реальным". Запрограммированные действия тоже работают хорошо (для примера запускаю таймер, который раз в 10 мсек меняет какие-то "визуально заметные" значения у каких-то виджетов). проблема начинается при "проксировании" событий (типа mouseMoveEvent(), mousePressEvent() и др. ) виджет принимает события (я их отлавливаю в дебаге), но отказывается их передавать дальше детям (к примеру, от клика по кнопке на виджете (по картинке, разумеется) кнопка не получается события click и, соответственно, никак не реагирует ) по ходу копания обнаружилось, что это происходит из-за того, что виджет не показан (isHidden() == true). попробывал сделать ему show() - он появился соседним окном и, разумеется, все действия производимые с реальным виджетом сразу отображались на его отрисовываемой картинке. События через картинку так и не стали проксироваться даже при показываемом виджете. вопрос: куда копать, что бы держать виджет спрятаным в памяти, и полностью управлять им через проксируемые события? в приложении - мой текущий "тестовый" проект, если кто-то захочет ковырнуться. комманда show(), показывающая виджет, располагается в AbstracrtTextureWidget конструкторе Название: Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям Отправлено: GreatSnake от Сентября 21, 2011, 06:35 Посмотри на это (http://www.prog.org.ru/index.php?topic=19458.msg131442#msg131442).
Название: Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям Отправлено: alexman от Сентября 21, 2011, 10:16 ieroglif, если будешь пробовать вариант GreatSnake, отпишись. Тоже интересно :)
Название: Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям Отправлено: ieroglif от Октября 05, 2011, 04:36 продолжу тему...
что бы получить текстуру виджета - таки закидываю его на QGraphicsScene. виджет включается, и рендерится нормально. у меня в виджете кнопка, для которой установлены разные по цвету цсс на hover состояния. что бы увидеть что событие mouseMove передаётся правильно, нормально. вот фик =) не могу я передать ему собственноручно сгенерированные евенты для мыши и клавиатуры. делаю postEvent для виджета, для сцены, уже запихал сцену во вью и делаю евент ему - всё пофик. нет реакции на hover.. куда копать? Название: Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям Отправлено: GreatSnake от Октября 05, 2011, 11:49 а зачем через postEvent()? шли через sendEvent().
Название: Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям Отправлено: ieroglif от Октября 05, 2011, 15:58 а зачем через postEvent()? шли через sendEvent(). не заработало.какие ещё варианты? |