当前位置 : 主页 > 手机开发 > 无线 >

qt – QMainWindow中的VTK小部件在鼠标移动之前不会渲染

来源:互联网 收集:自由互联 发布时间:2021-06-10
我有一个继承自QVTKWidget的小部件. class MyWidget : public QVTKWidget{ ...} 此小部件使用QT Designer和QT Interface Compiler从自动生成的头文件ui_MainWindow.h文件中实例化. ...myWidget = new MyWidget(centralWidge
我有一个继承自QVTKWidget的小部件.

class MyWidget : public QVTKWidget
{
    ...
}

此小部件使用QT Designer和QT Interface Compiler从自动生成的头文件ui_MainWindow.h文件中实例化.

...
myWidget = new MyWidget(centralWidget);
myWidget->setObjectName(QString::...);
...

在继承自QMainWindow的主窗口中,调用setupUi,因此初始化myWidget.

在MyWidget的构造函数中,初始化了vtkRenderWindow和vtRenderer.

MyWidget::MyWidget(QWidget *parent) : QVTKWidget(parent)
{
    ...

    renderWindow = vtkRenderWindow::New();
    renderer = vtkRenderer::New();
    renderer->SetBackground(72.0 / 255.0, ...

    renderWindow->AddRenderer(renderer);
    this->SetRenderWindow(renderWindow);

    QVTKInteractor * iren = this->GetInteractor();
    renderWindow->SetInteractor(iren);

    camera = vtkCamera::New();
    camera->SetPosition(...
    camera->SetFocalPoint(...
    camera->SetViewUp(...

    renderer->SetActiveCamera(camera);

    draw(renderer); // Custom draw function, adds actors etc.

    renderer->Render();
    renderWindow->Render();
    iren->Render();
}

但是,在我单击并移动(MouseMove)之前不会显示任何内容.然后,我的场景出现了.我已经尝试改变调用的顺序以及在定时器中添加额外的Render调用,但无济于事.

有人能指出我一个很好的方法来确保在构造函数通过之后呈现这个以这种方式实例化的小部件吗?

注意:我没有自己的Mouse-Move实现.鼠标移动似乎具有正确的效果,即在首次渲染时,根据我的鼠标移动,场景会稍微旋转.

试着打电话:

iRen->重新初始化()

作为代码的最后一步.每当我想确保渲染窗口交互器是最新的时,我就会调用它重新初始化.如果有效,请告诉我.

网友评论