gpt4 book ai didi

c++ - 控制 paintGL 方法 - 如何决定绘制什么?

转载 作者:行者123 更新时间:2023-11-28 07:28:57 25 4
gpt4 key购买 nike

我想通过按键事件控制 paintGL 方法。目的是通过插入返回来显示一个额外的点。换句话说:我画了一个漂亮的背景场景,现在我想按回车键(在 lineEdit 中),并且在已经显示的背景前面出现了一个红点。

//主窗口.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方法的影响?

最佳答案

在 OpenGL 中,您总是会重绘整个场景。将附加点存储在某个数组中。绘制时,您遍历该数组并根据数组的内容绘制点。

关于c++ - 控制 paintGL 方法 - 如何决定绘制什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com