无法使用QGLWiget

时间:2016-01-08 06:50:55

标签: qt qglwidget

qt opengl新手。我试图在我的opengl窗口中绘制一条线,但它没有显示。      代码正在执行而没有错误。请帮我。下面提到的代码有什么问题。

  //glwidget.cpp
    #include "glwidget.h"
    #include <QDebug>
    #include <QGLWidget>
    #include <QPainter>
    GLWidget::GLWidget(QWidget *parent) :
        QGLWidget(parent)
    {
    }

    void GLWidget::initializeGL()/*initialize*/
    {
        qDebug()<<"iniialize";
        glClearColor(0.0, 0.0, 102.0/255.0, 0.0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
    }

    void GLWidget::resizeGL(int width, int height)
    {
        qDebug()<<"resizeGL";
        glViewport(0, 0, (GLint)width, (GLint)height);
    }

    void GLWidget::paintGL()
    {
        qDebug()<<"paintGL";
        glBegin(GL_LINES);
            glVertex3f( 0.0f, 0.0f, 0.0f);
            glVertex3f(-1.0f,-1.0f, 0.0f);
        glEnd();

    }

    #ifndef GLWIDGET_H
    #define GLWIDGET_H

    #include <QWidget>
    #include <QGLWidget>
    #include <QPainter>

    class GLWidget : public QGLWidget
    {
        Q_OBJECT
    public:
        explicit GLWidget(QWidget *parent = 0);

        void initializeGL();

        void resizeGL(int width, int height);

        void  paintGL();
};

    main.cpp
    #include "mainwindow.h"
    #include <QApplication>

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

        QApplication a(argc, argv);

        MainWindow w;/*Mainwindow*/

        w.show();

        return a.exec();
    }

1 个答案:

答案 0 :(得分:2)

好吧,你应该考虑一下你告诉OpengGL在这里做什么:

用你的

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

调用,您可以设置投影矩阵,将0到1区域(X和Y方向)的世界映射到屏幕。

然后绘制一条从0到-1的线(在X和Y方向)。那条线现在在你的屏幕之外。

在GL_LINES调用中尝试更好的坐标。

另外,您可能希望通过清除屏幕来启动paintGL()例程:

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);