QOpenGLWidget в новом окне

У меня есть простой пользовательский интерфейс с кнопкой, после нажатия которой я должен открыть новое окно, в котором должны быть нарисованы вещи OpenGL. Я пытаюсь сделать это с помощью QOpenGLWidget, но функции InitializeGL() и paintGL() никогда не вызываются.

Так что в основном у меня есть main с функцией, которая должна начинать все:

void test::displayOpenGLObjects
{
    newOpenGLContext = std::make_unique<Visualization_OpenGL>(this);

}

Visualization_OpenGL.cpp

test::Visualization_OpenGL(QWidget *parent): QOpenGLWidget(parent)
{  
    QOpenGLWidget *test_window = new QOpenGLWidget();
    test_window->setWindowTitle("OpenGL Visualization");
    test_window->makeCurrent();
    test_window->show();
}

test::initializeGL(){
...
}

test::paintGL(){
...
}

test::resizeGL(){
    ...
}

И заголовок:

class Visualization_OpenGL : public QOpenGLWidget, public QOpenGLFunctions
{
    Q_OBJECT

public:
    Visualization_OpenGL(QWidget *parent);
    ~Visualization_OpenGL();
protected:
    void initializeGL() override;
    void resizeGL(int w, int h) override;
    void paintGL() override;

};

Все примеры, которые я видел, рисуют все в главном окне, и когда я делаю это таким образом, действительно вызывается paintGL() и initializeGL(), но мне нужно отдельное окно для этого, я думаю, моя проблема это что-то с участием QOpenGLWidget *test_window = new QOpenGLWidget(); но я не уверен, как это исправить. Я супер новичок в этом, так что извините, если это вопрос супер нуб, но любая помощь будет оценена.

1 ответ

Решение

Странно открывать один виджет в конструкторе другого. Вы можете создать новый виджет в слоте нажатия кнопки. Например:

void MainWindow::OnButtonClicked()
{
    Visualization_OpenGL* test_window = new Visualization_OpenGL();
    test_window->setWindowTitle("OpenGL Visualization");
    test_window->makeCurrent();
    test_window->show();
}

затем Visualization_OpenGL::initializeGL, Visualization_OpenGL::resizeGL а также Visualization_OpenGL::paintGL будет вызван.

Другие вопросы по тегам