我正在使用Qt4在OpenGL中创建一个简单的三角形,并且它工作正常,直到我使用set format来启用多重采样。这是我的代码:
#include <QApplication>
#include <QtOpenGL>
// gl window class
class GLWindow : public QGLWidget
{
public:
GLWindow(QWidget *parent = nullptr)
: QGLWidget(parent){}
protected:
// ALL THE FOLLOWING FUNCTIONS ARE OVERRIDDEN FROM QGLWIDGET
void initializeGL()
{
QGLFormat newFormat = this->format();
newFormat.setSampleBuffers(true);
newFormat.setSamples(16);
this->setFormat(newFormat);
}
void resizeGL(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0);
glVertex2f(0, 1);
glColor3f(0, 1, 0);
glVertex2f(1, -1);
glColor3f(0, 0, 1);
glVertex2f(-1, -1);
glEnd();
}
};
// main function
int main(int argc, char **argv)
{
QApplication app(argc, argv);
GLWindow window;
window.resize(640, 480);
window.show();
return app.exec();
}
在我在“initlializeGL”中添加格式之前,它工作正常(显然除了没有多重采样)。
然后,我添加格式的东西,窗口不关闭。当我这样说时,我的意思是当我按下右上角的“X”按钮时它不会关闭,或者当我调用窗口的“close()”函数时它甚至不会关闭。
此外,当你按下“X”按钮(我选中)时,它会调用“closeEvent()”,但实际上并没有关闭。我尝试在我的重写“closeEvent()”函数中调用“close()”,但它什么也没做。
再次,我删除“initializeGL()”中的代码,然后它关闭。所以,我尝试将“initializeGL()”中的代码移动到构造函数中。多重采样工作,当我按“X”时它关闭。大!除非我在窗口关闭后得到这个:
就是这样。简而言之:
那么如何让窗口关闭,同时启用多重采样并且在窗口关闭后不会出现一些哑误点?
编辑:这是我的.pro文件中的文字
QT += core
QT += gui
QT += opengl
SOURCES += \
main.cpp
答案 0 :(得分:3)
您不应该从setFormat
致电initializeGL
,因为它会触发对initializeGL
本身的调用。由于Qt 4.8中的QGLWidget::setFormat
为obsolete,因此您根本不应该使用它。
因此,首先尝试从构造函数中调用setFormat
,然后,如果它不起作用(或者即使它工作),尝试将格式从{{1}传递给QGLWidget
的构造函数}}