在Qt5.1&OpenGL中从'QAbstractOpenGLFunctions*'到'QOpenGLFunctions_4_3_Core*'的转换无效



我通过参考KDAB的文章第一部分来学习OpenGL。这是相当新颖和有益的。然而,我在页面上尝试他的代码时遇到了编译错误。

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

window.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

window.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();
    }

main.cpp:

#include <QCoreApplication>
#include <QGLWidget>
int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    return app.exec();
}

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

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

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

则误差被消除。

相关内容

  • 没有找到相关文章

最新更新