【问题标题】:QOpenGLWidget in new window新窗口中的 QOpenGLWidget
【发布时间】:2019-03-22 12:55:52
【问题描述】:

我有一个带有按钮的简单用户界面,按下按钮后我应该打开一个新窗口,应该在其中绘制 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(); 有关,但我不确定如何解决。我对此很陌生,所以如果这是一个超级菜鸟问题,我很抱歉,但任何帮助将不胜感激。

【问题讨论】:

  • 函数被调用。但是当您使用new QOpenGLWidget 创建一个对象时,显然它将是一个QOpenGLWidget,并且只会调用QOpenGLWidget::paintGL() 等。你的构造函数真的没有意义。它应该在this 上工作,而不是创建一个新对象。

标签: c++ qt opengl 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::initializeGLVisualization_OpenGL::resizeGLVisualization_OpenGL::paintGL将被调用。

【讨论】:

  • 谢谢!我迷路了
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多