3

我通过参考KDAB 的文章 part one来学习 OpenGL 。这是相当新的和有帮助的。但是,我在页面上尝试他的代码时遇到编译错误。

我的 Qt 项目中有三个文件:main.cpp、window.cpp 和 window.h。

窗口.h:

#ifndef WINDOW_H
#define WINDOW_H

#include <QWindow>
#include <QSurfaceFormat>
#include <QOpenGLContext>
#include <QOpenGLFunctions_4_3_Core>

class Window : public QWindow
{
    Q_OBJECT
public:
    Window(QScreen* screen);

signals:
private:
    QOpenGLContext *m_context;
    QOpenGLFunctions_4_3_Core* m_funcs;
};

#endif // WINDOW_H

窗口.cpp:

#include "window.h"

    Window::Window(QScreen* screen) :
        QWindow(screen)
    {
        setSurfaceType(OpenGLSurface);

        QSurfaceFormat format;
        format.setDepthBufferSize(24);
        format.setMajorVersion(4);
        format.setMinorVersion(3);
        format.setSamples(4);
        format.setProfile(QSurfaceFormat::CoreProfile);
        setFormat(format);
        create();

        m_context = new QOpenGLContext;
        m_context->setFormat(format);
        m_context->create();

        // Make the context current on this window
        m_context->makeCurrent( this );

        // Obtain a functions object and resolve all entry points
        // m_funcs is declared as: QOpenGLFunctions_4_3_Core* m_funcs
        m_funcs = m_context->versionFunctions();
        if ( !m_funcs ) {
            qWarning( "Could not obtain OpenGL versions object" );
            exit( 1 );
        }
        m_funcs->initializeOpenGLFunctions();
    //    m_funcs->glVertexAttribDivisor();
    }

主.cpp:

#include <QCoreApplication>
#include <QGLWidget>

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

    QCoreApplication app(argc, argv);
    return app.exec();
}

错误:从 'QAbstractOpenGLFunctions*' 到 'QOpenGLFunctions_4_3_Core*' 的无效转换 [-fpermissive]

4

1 回答 1

4

我在 Qt 的文档中找到了解决方案。声明应该是

m_funcs = m_context->versionFunctions<QOpenGLFunctions_4_3_Core>();

然后消除错误。

于 2013-07-15T09:40:34.120 回答