Qopenglwidget在新窗口中

QOpenGLWidget in new window

本文关键字:窗口 新窗口 Qopenglwidget      更新时间:2023-10-16

我有一个带有按钮的简单UI,在按下按钮后,我应该打开一个新窗口,应在其中绘制opengl的东西。我正在尝试使用Qopenglwidget 进行此操作,但是initializegl()和paintgl()函数从未被调用。

基本上,我拥有一个可以启动所有内容的功能的主要功能:

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

可视化_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;
};

我看到的所有示例都在mainwindow上绘制所有内容,当我这样做时,确实调用了paintgl()和initializegl(),但我需要为此有一个单独的窗口猜测我的问题涉及QOpenGLWidget *test_window = new QOpenGLWidget();,但我不确定如何解决。我对此非常新鲜,所以很抱歉,如果这是一个超级菜鸟的问题,但是任何帮助都将不胜感激。

在另一个构造函数中打开一个小部件很奇怪。您可以在按钮单击插槽中创建一个新的小部件。例如:

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

然后将调用Visualization_OpenGL::initializeGLVisualization_OpenGL::resizeGLVisualization_OpenGL::paintGL