我尝试了2个小时,用vtk创建了一个简单的图表,但没有成功。它不会呈现任何内容,并且我无法调用view->getRenderer () ->render ()函数。它会导致一个异常。
到目前为止我所理解的是:
vtkContextView* view = vtkContextView::New ();
QVTKWidget* widget = new QVTKWidget ();
widget->setRenderWindow (view->getRenderWindow ());创建图表并添加后...视图->getRenderer ()->render ();
我使用的是带有vs15的vtk 7.1,qt 5.7。
我也试图在互联网上找到一个完整的例子,但我没有找到任何完整的例子。
谁能举例说明如何使用qt创建这样的vtk图表?
发布于 2017-03-02 21:11:53
根据this discussion on the vtk mailing list的说法,小部件和视图可以像这样连接:
widget->SetRenderWindow(view->GetRenderWindow());
view->SetInteractor(widget->GetInteractor());看起来你错过了第二行。请参阅下面的完整示例。
#include <QtWidgets>
#include <QVTKWidget.h>
#include <vtkSmartPointer.h>
#include <vtkDoubleArray.h>
#include <vtkChartXY.h>
#include <vtkTable.h>
#include <vtkPlot.h>
#include <vtkContextView.h>
#include <vtkContextScene.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// Prepare plot data
auto table = vtkSmartPointer<vtkTable>::New();
table->AddColumn(vtkSmartPointer<vtkDoubleArray>::New());
table->AddColumn(vtkSmartPointer<vtkDoubleArray>::New());
table->GetColumn(0)->SetName("X");
table->GetColumn(1)->SetName("Y");
table->SetNumberOfRows(100);
for(int i = 0; i < 100; ++i)
{
table->SetValue(i, 0, i);
table->SetValue(i, 1, i*i);
}
// Create chart, view and widget
auto chart = vtkSmartPointer<vtkChartXY>::New();
auto line = chart->AddPlot(vtkChart::LINE);
line->SetInputData(table, 0, 1);
auto view = vtkSmartPointer<vtkContextView>::New();
view->GetScene()->AddItem(chart);
auto widget = new QVTKWidget();
view->SetInteractor(widget->GetInteractor());
widget->SetRenderWindow(view->GetRenderWindow());
widget->show();
return app.exec();
}发布于 2017-11-22 23:29:55
我遇到了完全相同的问题(Qt5.9,VTK7.1),stfnp的解决方案对我不起作用。真正起作用的是与问题的源代码有点相反的方法,即:
view->SetRenderWindow(widget->GetRenderWindow());而不是
widget->setRenderWindow(view->getRenderWindow ());这对我来说似乎更自然(要求视图在小部件提供的render窗口中呈现)。
https://stackoverflow.com/questions/40875368
复制相似问题