Отображение элемента QML поверх QWidget

Я хочу создать приложение, которое будет использовать преимущества как OpenGL, так и QML. Я хочу использовать QOpenGLWidget и поместить QML Item поверх него. Item будет частично прозрачным. Хотя это возможно с помощью QQuickView, но я только что понял, что он покрывает все прозрачные части черным цветом. Попытку добиться того, что мне нужно (пример проекта), можно найти на моем GitHub здесь.

Можно ли визуализировать QML Item со всеми дочерними элементами на существующем QWidget таким образом, чтобы он был виден под Item, где Item не полностью непрозрачен?

Я предполагаю, что в худшем случае я мог бы создавать растровые изображения из объектов QWidget и Item, как-то комбинировать и отображать их, но я ищу более простой способ. Если нет более простого способа, я бы никогда не смог отобразить эти два одновременно.

Причина, по которой я не хочу напрямую использовать возможности OpenGL в QML, заключается в этом. Может быть, мне следует просто использовать обходной путь, упомянутый в ссылке.


person Filip Hazubski    schedule 25.06.2016    source источник
comment
Вы пробовали QQuickWidget? Предполагается, что это гораздо лучшая альтернатива проблемным оконным контейнерам.   -  person jpnurmi    schedule 25.06.2016
comment
@ J-PNurmi Спасибо. Я не пробовал это раньше. Я проверю это и дам вам знать   -  person Filip Hazubski    schedule 25.06.2016
comment
Вы можете отображать пользовательский OpenGL внутри представления qtquick без необходимости использования каких-либо виджетов.   -  person Frank Osterfeld    schedule 25.06.2016
comment
@FrankOsterfeld Это тоже звучит как очень хорошая идея. Какие классы/объекты мне понадобятся?   -  person Filip Hazubski    schedule 25.06.2016
comment
Iirc вы можете либо интегрировать рендеринг с QQuickView, либо реализовать свой собственный QQuickItem. Подробностей под рукой нет, поиск невозможен.   -  person Frank Osterfeld    schedule 25.06.2016
comment
Это даст вам идею и фактический код: advancingusability.wordpress.com/2013/03/30/ . Я не совсем уверен, но кажется, это то, что вы хотите (посмотрите на блок управления в правой части видео)   -  person Franz B.    schedule 30.06.2016


Ответы (1)


Я думаю, вам не нужны виджеты для этого. Вы можете выполнить пользовательский рендеринг в QtQuick, используя класс QQuickFramebufferObject. Я делал это раньше, хотя кода больше нет. Эта статья объясняет, что делать https://blog.qt.io/blog/2015/05/11/integrating-custom-opengl-rendering-with-qt-quick-via-qquickframebufferobject/

person rightaway717    schedule 06.07.2016