C++ 改变QGLWidget的亮度

C++ 改变QGLWidget的亮度,c++,qt,opengl,qglwidget,C++,Qt,Opengl,Qglwidget,我有一个QGLWidget,我正在尝试调整使用滑块widget的亮度,但是我遇到了麻烦,试图让我的头知道我将如何去做这件事 我知道我需要将像素从帧缓冲区移动到矩阵,以便进行必要的调整,但我不知道如何进行调整。您需要为QGLWidget设置一个自定义插槽,这通常需要创建一个自定义类,该类使用添加的附加插槽的功能 假设你将其定义为: public slot: void foo(int value); 您需要将foo连接到您的QSlider信号之一:假设您可以在QGLWidget专用化中访问

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


我知道我需要将像素从帧缓冲区移动到矩阵,以便进行必要的调整,但我不知道如何进行调整。

您需要为
QGLWidget
设置一个自定义
插槽,这通常需要创建一个自定义类,该类使用添加的附加
插槽的功能

假设你将其定义为:

public slot:
    void foo(int value);
您需要
foo
连接到您的
QSlider
信号之一:假设您可以在
QGLWidget
专用化中访问
QSlider bar
,然后您可以在构造函数中执行此操作:

connect(&bar, &QSignal::valueChanged, this, &foo);
此连接将导致每次调用
bar.valueChanged
信号时调用
foo
。有关带有
QSlider
的信号和插槽的更深入示例,请参见此处:

编辑:

您似乎误解了什么是没有“像素”的
QGLWidget
。它有OpenGL对象。更新OpenGL对象后,您可以调用以强制您的
QGLWidget
专门化重新绘制

综上所述,您想问的是:“如何用另一种颜色重新绘制OpenGL对象?”

在我回答之前,你需要在你的问题中提供更多的信息。在最简单的情况下,你可以打电话来完成这个任务。如果这是您的情况,您可能会发现此链接很有帮助:

在更深入的情况下,例如忽略OpenGL对象的颜色的情况下,您可以在相机正前方添加一个黑色多边形,并在
foo
中更改其透明度。将此绘图绘制到颜色缓冲区而不是深度缓冲区可能就足够了,不过对于更复杂的遮挡着色器,您可能需要投入一些额外的工作


虽然我认为这些示例仍然使用
QGLWidget
,而不是
QOpenGLWidget
,但它们可能有助于您理解如何通过Qt使用OpenGL:

我知道连接如何工作我要问的是如何将小部件从帧缓冲区移动到矩阵,QGLWidget确实有一个像QImage Doeso这样的直接访问像素的方法,如果我要检索OpenGL对象的像素,有没有一个函数可以调用?我知道这可能不是最有效或最简单的方法,但这正是教授的要求。@BKreger我在回答中添加了一些Qt/OpenGL示例的链接。让我再次强调,你在寻找“像素”,但这就像是在问带你的金鱼散步的最佳方式是什么。试着理解这些例子,如果我的答案不足以让你继续,我们再谈。