изменение яркости QGLWidget

У меня есть QGLWidget, который я пытаюсь настроить яркость с помощью виджета ползунка, однако у меня возникают проблемы, пытаясь понять, как я буду это делать.

Я знаю, что мне нужно переместить пиксели из буфера кадра в матрицу, чтобы я мог внести необходимые корректировки, но я не понимаю, как это сделать.


person BKreger    schedule 15.04.2015    source источник


Ответы (1)


Вам нужно будет настроить собственный slot для вашего QGLWidget, что обычно предполагает создание пользовательского класса, наследуемого от QGLWidget, с добавленной функциональностью дополнительного slot.

Допустим, вы определяете это как:

public slot:
    void foo(int value);

Вам нужно connect foo перейти к одному из ваших сигналов QSlider: http://doc.qt.io/qt-5/qabstractslider.html#signals Допустим, у вас есть доступ к QSlider bar в вашей специализации QGLWidget, тогда вы можете сделать это в конструкторе:

connect(&bar, &QSignal::valueChanged, this, &foo);

Это соединение вызовет вызов foo каждый раз, когда вызывается сигнал bar.valueChanged. Более подробный пример сигналов и слотов с QSlider вы можете посмотреть здесь: http://doc.qt.io/qt-5/qtwidgets-widgets-sliders-example.html

ИЗМЕНИТЬ:

Вы, кажется, неправильно понимаете, что такое QGLWidget, у него нет "пикселей". Он имеет объекты OpenGL. После обновления объекта OpenGL вы можете вызвать paintGL для принудительной специализации QGLWidget для перерисовки.

Все, что вы хотите сказать, это то, что вы пытаетесь здесь спросить: "Как мне перерисовать объект OpenGL другим цветом?"

Вы должны предоставить больше информации в своем вопросе, прежде чем я смогу ответить на него. В простейшем случае вы можете просто вызвать glColor, чтобы выполнить это. . Если это ваш случай, вы, вероятно, найдете эту ссылку полезной: glColor фактически не меняет цвет OpenGL

В более сложных случаях, таких как ситуации, когда вы игнорируете цвет объекта OpenGL, вы можете добавить черный многоугольник прямо перед камерой и изменить его прозрачность в foo. Возможно, будет достаточно отрисовки в буфере цвета, но не в буфере глубины, хотя с более сложными шейдерами затенения вам, возможно, придется проделать некоторую дополнительную работу.

Хотя я думаю, что в этих примерах по-прежнему используется QGLWidget вместо QOpenGLWidget, они могут помочь вам понять, как работать с OpenGL через Qt: http://doc.qt.io/qt-5/примеры-виджеты-opengl.html

person Jonathan Mee    schedule 15.04.2015
comment
Я знаю, как работает подключение, и я спрашиваю, как переместить виджет из буфера кадра в матрицу, у QGLWidget есть прямой метод для доступа к пикселям, как у QImage. - person BKreger; 15.04.2015
comment
Итак, если бы мне нужно было получить пиксели открытых объектов gl, есть ли функция, которую я могу вызвать для этого? Я знаю, что, возможно, я не собираюсь делать это самым эффективным или простым способом, но именно об этом просит профессор. - person BKreger; 16.04.2015
comment
@BKreger Я добавил ссылку на некоторые примеры Qt/OpenGL в свой ответ. Позвольте мне еще раз подчеркнуть, что вы ищете пиксели, но это все равно, что спрашивать, как лучше всего вывести свою золотую рыбку на прогулку. Попытайтесь понять примеры, а затем, если мой ответ не содержит достаточно, чтобы вы могли начать, давайте поговорим еще раз. - person Jonathan Mee; 16.04.2015