У меня есть эта функция, которая должна рисовать прямоугольник в зависимости от того, где пользователь щелкает и перетаскивает, однако ничего не рисуется. Я попытался использовать функцию updateGL()
, которая возвращает ошибку. Я также пытался использовать QPainter, но я не был уверен, как работать с кодом ниже. Я также пытался использовать makeCurrent()
и doneCurrent()
, но это делает программу "неожиданно завершенной sh".
функции рисования формы:
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();
}
Также у меня есть это Функция Intializer и, возможно, в этом причина, но когда я пытаюсь запустить 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();
}