Я пишу программу Qt с двумя windows, каждая из которых содержит QOpenGLWidget. В каждом QOpenGLWidget я пишу текст с помощью QPainter. Программа работает, но при выходе я получаю ошибку сегментации (дамп ядра). Эта проблема не возникает, когда я пишу текст только в первом окне. Есть идеи, что не так? Заранее спасибо.
// openglwindow.h
class OpenGLWidget1 : public QOpenGLWidget
{ Q_OBJECT
public:
explicit OpenGLWidget1(QWidget *parent = nullptr);
void paintGL();
signals:
public slots:
};
class OpenGLWidget2 : public QOpenGLWidget
{ Q_OBJECT
public:
explicit OpenGLWidget2(QWidget *parent = nullptr);
void paintGL();
signals:
public slots:
};
// -----------------
// openglwindow.cpp
#include "openglwindow.h"
OpenGLWidget1::OpenGLWidget1(QWidget *parent) : QOpenGLWidget(parent)
{ }
void OpenGLWidget1::paintGL()
{ QPainter painter(this);
QColor fontColor=QColor(255,0,0,255);
painter.setPen(fontColor);
QString yo=QString::number(2020);
painter.drawText(50,50,yo);
}
OpenGLWidget2::OpenGLWidget2(QWidget *parent) : QOpenGLWidget(parent)
{ }
void OpenGLWidget2::paintGL()
{ QPainter painter(this);
QColor fontColor=QColor(255,0,0,255);
painter.setPen(fontColor);
QString yo=QString::number(2021);
// this line causes segmentation fault at the exit
painter.drawText(50,50,yo);
}
// -----------------
// mainwindow.h
#include <QMainWindow>
#include "openglwindow.h"
#include "pixwindow.h"
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow
{ Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
OpenGLWidget1 *w1;
OpenGLWidget2 *f1;
PixWindow *fo;
private slots:
void on_actionQuit_triggered();
private:
Ui::MainWindow *ui;
};
// -----------------
// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{ ui->setupUi(this);
// main window
w1=ui->ogl1;
// pixel window
fo=new PixWindow();
fo->setWindowTitle("Pixel Window");
fo->show();
}
MainWindow::~MainWindow()
{ delete ui; }
void MainWindow::on_actionQuit_triggered()
{ qApp->quit(); }
// -----------------
// pixwindow.h
#include <QDialog>
#include <openglwindow.h>
namespace Ui { class PixWindow; }
class PixWindow : public QDialog
{ Q_OBJECT
public:
explicit PixWindow(QWidget *parent = 0);
~PixWindow();
OpenGLWidget2 *return_window();
private:
Ui::PixWindow *ui;
};
// -----------------
// pixwindow.cpp
PixWindow::PixWindow(QWidget *parent) : QDialog(parent), ui(new Ui::PixWindow)
{ ui->setupUi(this);
}
PixWindow::~PixWindow()
{ delete ui; }
OpenGLWidget2 *PixWindow::return_window()
{ return(ui->ogl2); }