【发布时间】:2020-04-16 17:52:58
【问题描述】:
我有这个函数,它应该根据用户点击和拖动的位置绘制一个矩形,但是没有绘制任何内容。我曾尝试使用 updateGL() 函数,但它返回错误。我也尝试过使用 QPainter,但我不确定如何使用下面的代码。我也尝试过使用makeCurrent() 和doneCurrent(),但这会使程序“意外完成”。
形状绘制函数:
void drawingArea::paintEvent(QPaintEvent *event)
{
paintGL();
}
void drawingArea::mousePressEvent(QMouseEvent *event)
{
Shape newShape;
int x = event->x(),y = event->y();
shapes.push_back(newShape);
Point newPoint(x,y);
shapes[0].addPoint(newPoint);
}
void drawingArea::mouseReleaseEvent(QMouseEvent *event)
{
QVector<int> startPoint = shapes[0].points[0].getPoint();
int vertices[]
{
event->x(),event->y(),0,
event->x(),startPoint[1],0,
event->x(),event->y(),0,
startPoint[0],event->y(),0
};
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_INT,0,vertices);
glDrawArrays(GL_QUADS,0,4);
QPainter painter(this);
glDisableClientState(GL_VERTEX_ARRAY);
update();
}
我也确实有这个初始化函数,也许是这个原因,但是当我尝试运行 context->makeCurrent() 时它会抛出一个错误,所以我已经将它注释掉了,但我会删除该函数以防万一
drawingArea::drawingArea(QWidget *parent) : QOpenGLWidget(parent)
{
//initializeGL();
//paintGL();
QSurfaceFormat format;
format.setProfile(QSurfaceFormat::CompatibilityProfile);
format.setVersion(2,1);
setFormat(format);
context = new QOpenGLContext;
context->setFormat(format);
context->create();
//context->makeCurrent(this->);
openGLFunctions = context->functions();
}
【问题讨论】: