我使用Qt4在OpenGL中做了一個簡單的三角形,它工作正常,直到我使用set format來啓用多重採樣。這裏是我的代碼:QGLWidget:使用setFormat()來啓用Multisampling =窗口不關閉
#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」時關閉。大!除非我得到這個窗口後關閉:
所以這是。簡而言之:
- 當「initializeGL()」中沒有「setFormat()」相關代碼時,一切正常。
- 當我把「setFormat()」相關代碼放在「initializeGL()」中時,窗口不關閉。
- 當我把我的「setFormat()」相關代碼放在構造函數中時,當窗口關閉時,出現上圖中顯示的怪異錯誤;
那麼,如何讓窗口關閉,同時保持多重採樣啓用,並沒有得到一些愚蠢的錯誤後窗戶關閉?
編輯:這裏是我的.pro文件
QT += core
QT += gui
QT += opengl
SOURCES += \
main.cpp
太棒了,我將格式傳遞給QGLWidget的構造函數,它現在可以工作!非常感謝:D – Aaron