QOpenGLWidget в новом окне - PullRequest
0 голосов
/ 22 марта 2019

У меня есть простой пользовательский интерфейс с кнопкой, после нажатия которой я должен открыть новое окно, в котором должны быть нарисованы вещи 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 Ответ

0 голосов
/ 22 марта 2019

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

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.

...