改变QGLWidget的亮度

时间:2015-04-15 18:47:55

标签: c++ qt opengl qglwidget

我有一个QGLWidget,我正在尝试调整使用滑块小部件的亮度但是我遇到了麻烦试图让我了解我将如何去做这件事。

我知道我需要将帧缓冲区中的像素移动到矩阵中,这样我就可以进行必要的调整,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您需要为slot设置自定义QGLWidget,这通常会涉及创建一个继承自QGLWidget的自定义类,并增加了附加功能slot 1}}。

所以,让我们说你将其定义为:

public slot:
    void foo(int value);

您需要connect foo发送QSliderQSlider bar信号之一:http://doc.qt.io/qt-5/qabstractslider.html#signals我们假设您有权访问{{1}在你的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 not actually changing OpenGL's color

在更深入的情况下,例如您忽略OpenGL对象颜色的情况,您可以在相机前面添加黑色多边形并更改它foo中的透明度。将此绘制到颜色缓冲区而不是深度缓冲区就足够了,但是如果使用更复杂的模糊着色器,则可能需要进行一些额外的工作。

虽然我认为这些示例仍然使用QGLWidget而不是QOpenGLWidget,但它们可能对您了解如何通过Qt使用OpenGL有所帮助:http://doc.qt.io/qt-5/examples-widgets-opengl.html