2013-08-07 22 views
0

我想通過按鍵事件來控制paintGL方法。目的是通過推動返回來顯示一個附加點。 換句話說:我畫了一個很好的背景場景,現在我想推回(在一個lineEdit中),並且在已經顯示的背景前出現了一個紅點。控制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(); 
    } 

} 

有人可以解釋,爲什麼這是不工作?紅色點不出現...... 的值受paintGL方法的影響嗎?

+0

當你調試時,它實際上是否進入'draw == 1'條件?你是否確定你的視口尺寸在屏幕邊界內的位置是45,45? – Lochemage

+0

是的,它確實進入了draw == 1狀態,但立即回到零。所以我認爲,這一點「顯示」幾毫秒,但我不確定...視口是好的。在if條件之外顯示該點。 – edcrfv45

+0

我會嘗試改變你的變量名稱,然後,如果它回到0那麼這意味着它只能繪製一幀。 – Lochemage

回答

1

在OpenGL中,您總是重繪整個場景。將附加點存儲在某個數組中。繪製時,您將遍歷該數組,並根據數組的內容繪製點。

+0

我在set_draw-方法中定義的陣列(100,100,0)和改變paintGL如下:void GLWidget :: paintGL() { swapBuffers(); glClear(GL_COLOR_BUFFER_BIT); glPointSize(3); glBegin(GL_POINTS); glVertex3f(point_array [0],point_array [1],point_array [2]); glEnd(); }這將導致一個點,在(0,0,0),這意味着該陣列被設置爲零如先前的「畫」可變... – edcrfv45

+0

@ edcrfv45:那麼,在這種情況下,單個變量就足夠了。我建議一個數組,以便可以添加幾個點,而不只是一個。 – datenwolf