Вам нужно будет настроить собственный 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