简体   繁体   English

qt openGL-绘制三角形

[英]qt openGL - draw triangle

So my goal is to (first) draw a triangle with openGL. 因此,我的目标是(首先)使用openGL绘制一个三角形。

my questions: 我的问题:

1) How/when do both of my functions get called? 1)如何/何时调用我的两个函数? I see that only one gets called. 我看到只有一个人被打来。 ie void MyGLWidget::paintGL. 即无效MyGLWidget :: paintGL。 I am confused because as you can see I never call this function, it gets called automatically.I added a widget on my ui which I promoted to MyGLWidget. 我很困惑,因为如您所见,我从未调用过此函数,而是自动调用该函数。我在ui上添加了一个小部件,并将其提升为MyGLWidget。 But when/why/how does it get (not) called? 但是何时/为什么/如何调用(不调用)?

my code: myglwidget.cpp 我的代码:myglwidget.cpp

#include "myglwidget.h"
#include <QtWidgets>
#include <QtOpenGL>
#include <GL/glu.h>


MyGLWidget::MyGLWidget(QWidget *parent)
    : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
{
}

void MyGLWidget::initializeGL()
{
    glClearColor(1,1,0,1);
    qDebug("init"); //<-------never gets printed
}

void MyGLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    qDebug("painting"); //<---- does get printed
    glColor3f(1,0,0);
    glBegin(GL_TRIANGLES);
        glVertex3f(-0.5,-0.5,0);
        glVertex3f(0.5,-0.5,0);
        glVertex3f(0.0,0.5,0);
    glEnd();
}

myglwidget.h myglwidget.h

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H
#include <QGLWidget>

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

   void initializeGL();
   void paintGL();
   void resizeGL(int width, int height);
private:

};

#endif // MYGLWIDGET_H

main.cpp main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setWindowTitle("OpenGL with Qt DAO");
    w.show();

    return a.exec();
}

I do not see a class called Widget made by you which is connected to the class MyGlWidget. 我看不到您创建的名为Widget的类,该类连接到MyGlWidget类。 Maybe I am wrong but shouldn't you have to make a instance of MyGlWidget (Call it's constructor instead of Widget?) 也许我错了,但您是否不应该创建MyGlWidget的实例(调用它的构造方法而不是Widget?)

Both functions are called internally by the QGLWidget super class. 这两个函数都由QGLWidget超类在内部调用。 See QT Docs 参阅QT文件

In the documentation you also see that these virtual functions are protected . 在文档中,您还可以看到这些虚拟功能受到保护 In your code they are public . 在您的代码中,它们是公共的 So you have to change that in order to make it work. 因此,您必须对其进行更改才能使其正常运行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM