Russian Qt Forum
Ноябрь 01, 2024, 06:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: GUI для QGlWidget  (Прочитано 8379 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Май 14, 2015, 10:56 »

Есть трехмерная сцена моделирующая некоторый процесс, как создать элементы управления (кнопки/текст) поверх трехмерной сцены?
Qt5, opengl через QGlWidget без QPainter.
« Последнее редактирование: Май 15, 2015, 08:01 от deMax » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Май 14, 2015, 11:43 »

QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 14, 2015, 11:52 »

QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки
Поверх QGLWidget никакие виджеты рисоваться не будут (прямой вывод на экран). К тому же QGLWidget deprecated. А вот с QOpenGLWidget все будет как Вы сказали. Что впрочем не значит что QOpenGLWidget "лучше" - там свои минусы
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #3 : Май 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 правильнее будет интерфейс нарисовать, тем более он очень простой - текст и кнопки (по сути картинки с прозрачностью).
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Май 14, 2015, 12:03 »

QGlWidget это обычный виджет, у него есть layout, вот и добавьте прямо на его компоновщик кнопки
Поверх QGLWidget никакие виджеты рисоваться не будут (прямой вывод на экран). К тому же QGLWidget deprecated. А вот с QOpenGLWidget все будет как Вы сказали. Что впрочем не значит что QOpenGLWidget "лучше" - там свои минусы

Как все-таки мудрено Улыбающийся

Помнится в готовых инструментах здесь кто-то выкладывал виджет-стекло, которое размещается поверх указанного виджета
Ведь можно такое замутить: поверх QGLWidget разместить свой виджет, а на свой уже и запихать кнопки Улыбающийся
« Последнее редактирование: Май 14, 2015, 12:08 от gil9red » Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 14, 2015, 12:53 »

Как все-таки мудрено Улыбающийся

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

Сообщений: 600



Просмотр профиля
« Ответ #6 : Май 14, 2015, 12:56 »

И как тогда gui рисовать? рендерить изображения элементов, потом биндить в текстуру и отрисовывать на прямоугольниках?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Май 14, 2015, 13:50 »

И как тогда gui рисовать? рендерить изображения элементов, потом биндить в текстуру и отрисовывать на прямоугольниках?
Если у Вас QGLWidget - то сначала исправьте название темы, а то хз о чем говорить.
Записан
ibnz
Гость
« Ответ #8 : Май 14, 2015, 16:13 »

Есть вариант маскировать область с GUI, если дизайн предполагает их компактное статичное размещение.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Май 14, 2015, 16:31 »

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

Есть вариант маскировать область с GUI,
Если можно - подробнее (какие вызовы OpenGL и.т.п.). Спасибо

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

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Май 15, 2015, 11:07 »

1. Сделать обычный виджет с гуем в нужном месте.
2. Cверху кинуть gl виджет у которого с помощью setMask вырезана та часть, где должен быть гуи.
3. PROFIT.
Ой, что-то слишком просто Улыбающийся Ну ладно, пусть ТС проверяет
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #12 : Май 15, 2015, 11:40 »

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

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

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

Сообщений: 600



Просмотр профиля
« Ответ #13 : Май 15, 2015, 15:08 »

Как рисовать в координатах экрана?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.142 секунд. Запросов: 22.