关于 QOpenGLWidget 的错误

Posted

技术标签:

【中文标题】关于 QOpenGLWidget 的错误【英文标题】:errors about QOpenGLWidget 【发布时间】:2016-05-07 03:10:41 【问题描述】:

How do I render a triangle in QOpenGLWidget? 当我做为链接时,会发生错误 errors like these mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui 
class myWidget;


class myWidget : public QWidget

    Q_OBJECT

public:
    explicit myWidget(QWidget *parent = 0);
    ~myWidget();

private:
    Ui::myWidget *ui;
;

#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"

myWidget::myWidget(QWidget *parent) :
    QWidget(parent),
ui(new Ui::myWidget)

    ui->setupUi(this);


myWidget::~myWidget()

    delete ui;

oglwidget.h

#ifndef OGLWIDGET_H
#define OGLWIDGET_H
#include <QWidget>
#include <QOpenGLWidget>
#include <GL/glu.h>
#include <GL/gl.h>

class OGLWidget : public QOpenGLWidget

public:
    OGLWidget(QWidget *parent=0);
    ~OGLWidget();
protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
;

#endif // OGLWIDGET_H

oglwidget.cpp

#include "oglwidget.h"

OGLWidget::OGLWidget(QWidget *parent)
    :QOpenGLWidget(parent)

    


OGLWidget::~OGLWidget()




void OGLWidget::initializeGL()

    glClearColor(0,0,0,1);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);
    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    glEnable(GL_COLOR_MATERIAL);


void OGLWidget::paintGL()

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

     glBegin(GL_TRIANGLES);
     glColor3f(1.0, 0.0, 0.0);
     glVertex3f(-0.5, -0.5, 0);
     glColor3f(0.0, 1.0, 0.0);
     glVertex3f( 0.5, -0.5, 0);
     glColor3f(0.0, 0.0, 1.0);
     glVertex3f( 0.0,  0.5, 0);
     glEnd();


void OGLWidget::resizeGL(int w, int h)

    glViewport(0,0,w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, (float)w/h, 0.01, 100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0,0,5,0,0,0,0,1,0);

main.cpp

#include "mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    myWidget w;
    w.show();

    return a.exec();

form 为什么会发生这些错误?我错过了一些包含文件吗? Qt 5.5版

【问题讨论】:

不要将错误文本作为图片发布。 【参考方案1】:

终于找到了解决办法 最后两行应添加到 .pro 文件中

HEADERS       = glwidget.h \
            mainwindow.h
SOURCES       = glwidget.cpp \
            main.cpp \
            mainwindow.cpp
QT           += opengl
LIBS        +=  -lopengl32
LIBS        += -lglu32

然后可能会显示 qtcreator_process_stub 终端窗口,我去项目->运行->取消选中“在终端中运行” 是的,这行得通!我的操作系统是 Win10 64bit 和 Qt5.6 with mingw

【讨论】:

以上是关于关于 QOpenGLWidget 的错误的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.5 QOpenGLWidget链接错误未链接任何openGL调用

没有子类化的 QOpenGLWidget

QOpenGLWidget 粉碎显示

将 GLEW 与 QOpenGLWidget 一起使用

加不了openglwidget

Qt 5.5 和 OpenGL:检索设备信息