управление методом paintGL — Как решить, что рисовать?

Я хочу управлять методом paintGL с помощью события нажатия клавиши. Цель состоит в том, чтобы показать дополнительную точку нажатием кнопки возврата.
Другими словами: я нарисовал красивую фоновую сцену, и теперь я хочу нажать return (в lineEdit), и перед уже показанным фоном появляется красная точка.

//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?

0

Решение

В OpenGL вы всегда перерисовываете всю сцену. Сохраните дополнительную точку в некотором массиве. При рисовании вы перебираете этот массив и рисуете точки в соответствии с содержимым массива.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]