我想通過按鍵事件來控制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方法的影響嗎?
當你調試時,它實際上是否進入'draw == 1'條件?你是否確定你的視口尺寸在屏幕邊界內的位置是45,45? – Lochemage
是的,它確實進入了draw == 1狀態,但立即回到零。所以我認爲,這一點「顯示」幾毫秒,但我不確定...視口是好的。在if條件之外顯示該點。 – edcrfv45
我會嘗試改變你的變量名稱,然後,如果它回到0那麼這意味着它只能繪製一幀。 – Lochemage