Undefined symbols for architecture x86_64: "QWidget::KeyPressEvent(QKeyEvent*)"



  • Now I understand from searching for a few hours this means that there virtual function that has not been implemented or a v table value that has been missing, I have been trying for the past 4 hours and no luck just to compile a core profile opengl program, from the 4.8 documentation. This is my first time using the QT Frame work so if someone can help me out that would be great =).

    It appears I have implemented the KeyPressEvent virtual function in RenderMii.cpp but its coming up with another error as you can see in the compile error. I am using QTCreator with Clang and I also tried GCC didn't work as well.

    moc_rendermii.o -F/Developer/QtSDK/Desktop/Qt/4.8.0/gcc/lib -L/Developer/QtSDK/Desktop/Qt/4.8.0/gcc/lib -framework QtOpenGL -framework QtGui -framework QtCore -framework OpenGL -framework AGL
    Undefined symbols for architecture x86_64:
    "QWidget::KeyPressEvent(QKeyEvent*)", referenced from:
    RenderMii::KeyPressEvent(QKeyEvent*) in rendermii.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [RenderMii.app/Contents/MacOS/RenderMii] Error 1
    make: Leaving directory `/Users/MichaelChung/projects/RenderMii'
    15:47:23: The process "/usr/bin/make" exited with code 2.
    Error while building project RenderMii (target: Desktop)
    When executing build step 'Make'



  • Here is some code

    @
    #include <QCoreApplication>
    #include <QGLWidget>
    #include <QGLBuffer>
    #include <QGLShaderProgram>
    #include <QKeyEvent>

    class RenderMii : public QGLWidget
    {
    Q_OBJECT

    public:
    RenderMii(const QGLFormat & gl_format,QWidget * parent = 0);
    ~RenderMii();

    protected:
    virtual void InitializeGL();
    virtual void ResizeGL(int w, int h);
    virtual void PaintGL();

    virtual void KeyPressEvent(QKeyEvent * e);
    

    private:
    bool PrepareShaderProgram(const QString & vertex_shader_path,
    const QString & fragment_shader_path);
    QGLShaderProgram m_shader;
    QGLBuffer m_vertex_buffer;

    };

    void RenderMii::KeyPressEvent(QKeyEvent * e )
    {
    switch ( e->key() )
    {
    case Qt::Key_Escape:
    QCoreApplication::instance()->quit();
    break;

    default:
        QGLWidget::KeyPressEvent( e );
    }
    

    }
    @

    [[marked up code, Tobias]]



  • It's QGLWidget::keyPressEvent( e ) - with a lowercase k. Then for your own method name too, of course, otherwise it wouldn't be a reimplementation of a virtual method, but a completely new method.



  • Hey thanks for replying I got it working silly me I renamed functions with capitals instead of overriding them correctly I forgot that I was overriding members from the base class, anyways thats all fixed and I just learned that RC doesn't support osx lion correctly and the opengl context isn't created properly when I write the shader it tells me #version 150 glsl is not supported which is true since the context set up is version 1.0 opengl :S


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.