我有一个带有按钮的简单UI,按下按钮后,我应该打开一个新窗口,在其中绘制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();
,但我不确定如何解决。我对此非常陌生,因此如果这是一个超级菜鸟问题,我们深感抱歉,但是任何帮助将不胜感激。
答案 0 :(得分:0)
在另一个小部件的构造函数中打开一个小部件很奇怪。您可以在按钮单击插槽中创建一个新的小部件。例如:
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
。