Russian Qt Forum
Августа 29, 2025, 22:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
абстрактный виджет, управляемый через картинку себя. не передаются события детям
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: абстрактный виджет, управляемый через картинку себя. не передаются события детям (Прочитано 3471 раз)
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 конструкторе
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям
«
Ответ #1 :
Сентября 21, 2011, 06:35 »
Посмотри на
это
.
Записан
Qt 5.11/4.8.7 (X11/Win)
alexman
Гость
Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям
«
Ответ #2 :
Сентября 21, 2011, 10:16 »
ieroglif, если будешь пробовать вариант GreatSnake, отпишись. Тоже интересно
Записан
ieroglif
Гость
Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям
«
Ответ #3 :
Октября 05, 2011, 04:36 »
продолжу тему...
что бы получить текстуру виджета - таки закидываю его на QGraphicsScene.
виджет включается, и рендерится нормально.
у меня в виджете кнопка, для которой установлены разные по цвету цсс на hover состояния. что бы увидеть что событие mouseMove передаётся правильно, нормально. вот фик =)
не могу я передать ему собственноручно сгенерированные евенты для мыши и клавиатуры.
делаю postEvent для виджета, для сцены, уже запихал сцену во вью и делаю евент ему - всё пофик.
нет реакции на hover..
куда копать?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям
«
Ответ #4 :
Октября 05, 2011, 11:49 »
а зачем через postEvent()? шли через sendEvent().
Записан
Qt 5.11/4.8.7 (X11/Win)
ieroglif
Гость
Re: абстрактный виджет, управляемый через картинку себя. не передаются события детям
«
Ответ #5 :
Октября 05, 2011, 15:58 »
Цитата: GreatSnake от Октября 05, 2011, 11:49
а зачем через postEvent()? шли через sendEvent().
не заработало.
какие ещё варианты?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...