keypress-event를 사용하여 paintGL 메서드를 제어하려고합니다. 목표는 복귀를 밀어서 추가 지점을 보여주는 것입니다. 다른 말로하면 : 멋진 배경 장면을 그렸습니다. 이제는 선 편집에서 반환을 푸시하고 이미 표시된 배경 앞에 빨간색 점이 나타납니다.paintGL 메서드 제어 - 페인트 할 대상을 결정하는 방법?
//MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
glWidget = new GLWidget;
connect(ui->lineEdit, SIGNAL(returnPressed()), glWidget, SLOT (set_draw()));
}
//glwidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QGLWidget>
#include <QMessageBox>
#include "mainwindow.h"
#include "cstdio"
class MainWindow;
class GLWidget : public QGLWidget
{
Q_OBJECT
MainWindow *myMainWindow;
public:
GLWidget(QWidget *parent = 0);
//~GLWidget;
int draw;
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
public slots:
void set_draw();
};
#endif // GLWIDGET_H
//glwidget.cpp
GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent)
{
draw = 0;
}
//-------------
void GLWidget::set_draw() //this SLOT is activated by pushing return
{
draw = 1;
updateGL(); //updating paintGL...
}
//-------------
void GLWidget::paintGL()
{
swapBuffers();
glClear(GL_COLOR_BUFFER_BIT);
/* drawing a lot of stuff*/
if(draw == 1)
{
/*the following messagebox is shown at the screen*/
QMessageBox* Box = new QMessageBox();
Box->setText("Bert");
Box->show();
/*this big red point is NOT shown at the screen*/
glPointSize(30);
glBegin(GL_POINTS);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(45,45,0);
glEnd();
}
}
이 왜 작동하지
누군가가 설명 할 수 ? 빨간색 점이 나타나지 않습니다 ... int draw
값이 paintGL 메서드의 영향을 받습니까?
디버그 할 때 실제로 'draw == 1'조건부로 들어가는가? 또한 뷰포트 크기가 화면 경계 내에서 45, 45 위치를 차지하고 있습니까? – Lochemage
예, 그리기 == 1 조건으로 들어가지만 immediatly 0으로 되돌아갑니다. 그래서 저는 생각합니다. 요점은 몇 밀리 초 동안 "보여졌습니다". 그러나 나는 확실하지 않습니다 ... 뷰포트는 괜찮습니다. if-condition 외부에는 해당 지점이 표시됩니다. – edcrfv45
변수 이름을 변경하려고합니다. 0으로 돌아 가면 한 프레임 만 그려집니다. – Lochemage