3

KDABさんの記事part1を参考にOpenGLを学んでいます。それはかなり新しく、役に立ちます。ただし、ページで彼のコードを試すと、コンパイル エラーが発生します。

私の Qt プロジェクトには、main.cpp、window.cpp、window.h の 3 つのファイルがあります。

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

ウィンドウ.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*' への無効な変換 [-fpermissive]

4

1 に答える 1

4

Qtのドキュメントで解決策を見つけました。ステートメントは

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

その後、エラーは解消されます。

于 2013-07-15T09:40:34.120 に答える