Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: deMax от Май 14, 2015, 10:56



Название: GUI для QGlWidget
Отправлено: deMax от Май 14, 2015, 10:56
Есть трехмерная сцена моделирующая некоторый процесс, как создать элементы управления (кнопки/текст) поверх трехмерной сцены?
Qt5, opengl через QGlWidget без QPainter.


Название: Re: GUI для QOpenGlWidget
Отправлено: gil9red от Май 14, 2015, 11:43
QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки


Название: Re: GUI для QOpenGlWidget
Отправлено: Igors от Май 14, 2015, 11:52
QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки
Поверх QGLWidget никакие виджеты рисоваться не будут (прямой вывод на экран). К тому же QGLWidget deprecated. А вот с QOpenGLWidget все будет как Вы сказали. Что впрочем не значит что QOpenGLWidget "лучше" - там свои минусы


Название: Re: GUI для QOpenGlWidget
Отправлено: deMax от Май 14, 2015, 12:00
QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки
Да только кнопку воткнешь, тут же ворох ошибок:
Цитировать
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::pen: Painter not active
QPainter::setPen: Painter not active
....

Рисую через paintGL(), не paintEvent(QPaintEvent*).

Мне кажется через opengl правильнее будет интерфейс нарисовать, тем более он очень простой - текст и кнопки (по сути картинки с прозрачностью).


Название: Re: GUI для QOpenGlWidget
Отправлено: gil9red от Май 14, 2015, 12:03
QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки
Поверх QGLWidget никакие виджеты рисоваться не будут (прямой вывод на экран). К тому же QGLWidget deprecated. А вот с QOpenGLWidget все будет как Вы сказали. Что впрочем не значит что QOpenGLWidget "лучше" - там свои минусы

Как все-таки мудрено :)

Помнится в готовых инструментах здесь кто-то выкладывал виджет-стекло, которое размещается поверх указанного виджета
Ведь можно такое замутить: поверх QGLWidget разместить свой виджет, а на свой уже и запихать кнопки :)


Название: Re: GUI для QOpenGlWidget
Отправлено: Igors от Май 14, 2015, 12:53
Как все-таки мудрено :)

Помнится в готовых инструментах здесь кто-то выкладывал виджет-стекло, которое размещается поверх указанного виджета
Ведь можно такое замутить: поверх QGLWidget разместить свой виджет, а на свой уже и запихать кнопки :)
То стекло не будет работать поверх QGLWidget или QOpenGLWindow. Вот окно (не просто виджет) будет, но тогда капитальный геморрой с фокусом


Название: Re: GUI для QOpenGlWidget
Отправлено: deMax от Май 14, 2015, 12:56
И как тогда gui рисовать? рендерить изображения элементов, потом биндить в текстуру и отрисовывать на прямоугольниках?


Название: Re: GUI для QOpenGlWidget
Отправлено: Igors от Май 14, 2015, 13:50
И как тогда gui рисовать? рендерить изображения элементов, потом биндить в текстуру и отрисовывать на прямоугольниках?
Если у Вас QGLWidget - то сначала исправьте название темы, а то хз о чем говорить.


Название: Re: GUI для QOpenGlWidget
Отправлено: ibnz от Май 14, 2015, 16:13
Есть вариант маскировать область с GUI, если дизайн предполагает их компактное статичное размещение.


Название: Re: GUI для QOpenGlWidget
Отправлено: Igors от Май 14, 2015, 16:31
Есть вариант маскировать область с GUI,
Если можно - подробнее (какие вызовы OpenGL и.т.п.). Спасибо


Название: Re: GUI для QOpenGlWidget
Отправлено: ibnz от Май 15, 2015, 10:36
Есть вариант маскировать область с GUI,
Если можно - подробнее (какие вызовы OpenGL и.т.п.). Спасибо

1. Сделать обычный виджет с гуем в нужном месте.
2. Cверху кинуть gl виджет у которого с помощью setMask вырезана та часть, где должен быть гуи.
3. PROFIT.



Название: Re: GUI для QOpenGlWidget
Отправлено: Igors от Май 15, 2015, 11:07
1. Сделать обычный виджет с гуем в нужном месте.
2. Cверху кинуть gl виджет у которого с помощью setMask вырезана та часть, где должен быть гуи.
3. PROFIT.
Ой, что-то слишком просто :) Ну ладно, пусть ТС проверяет


Название: Re: GUI для QOpenGlWidget
Отправлено: deMax от Май 15, 2015, 11:40
1. Сделать обычный виджет с гуем в нужном месте.
2. Cверху кинуть gl виджет у которого с помощью setMask вырезана та часть, где должен быть гуи.
3. PROFIT.

Можно еще проще, на виджет кинуть QGLWidget вне компоновщика, просто присвоить ему родителем этот виджет и в методе resize масштабировать его под базовый виджет.

Это все работает, только я хотел в OpenGl порисовать. Сцена отрисовывается через VBO и glUseProgram с шейдерами. Как мне картинку отрисовать? через прямоугольник с текстурой или на пиксельных шейдерах как то можно вывести картинки с нужными координатами без масштабирования?


Название: Re: GUI для QGlWidget
Отправлено: deMax от Май 15, 2015, 15:08
Как рисовать в координатах экрана?