c++ - Qt Ros 工作区中的 QVTKWidget 问题

标签 c++ linux qt ros qvtkwidget

我是 Qt 和 ROS 的新手。 我正在研究 Qt Creator 4.8.0。我在 Qt 中创建了一个 catkin 工作区,并创建了一个 mainwindow。 我正在尝试将 QVTKWidget 添加到 mainwindow。它已成功构建,但在运行时显示错误消息。

代码:mainwindow.cpp

vtkWidget = new QVTKWidget;
ui.verticalLayout->addWidget(vtkWidget);
ui.verticalLayout->update();
ren = vtkRenderer::New();
vtkWidget->GetRenderWindow()->AddRenderer(ren);
ren->SetBackground(1.0,0,0);
ren->Render();
Error:realloc(): invalid pointer: 0x00007facb5723820 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7facb37d77e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x85d80)[0x7facb37e5d80]
/lib/x86_64-linux-gnu/libc.so.6(realloc+0x22f)[0x7facb37e48ef]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN9QListData7reallocEi+0x1f)[0x7facada009cf]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_ZN9QListData6appendEi+0x81)[0x7facada00aa1]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(+0x1d6d78)[0x7facadaccd78]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(_Z21qRegisterResourceDataiPKhS0_S0_+0x2e6)[0x7facadac8b16]
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5(+0x7bcc3)[0x7facad971cc3]
/lib64/ld-linux-x86-64.so.2(+0x106ba)[0x7facb6c5a6ba]
/lib64/ld-linux-x86-64.so.2(+0x107cb)[0x7facb6c5a7cb]
/lib64/ld-linux-x86-64.so.2(+0xc6a)[0x7facb6c4ac6a]

最佳答案

在调用 AddRenderer 之前,您应该检查 vtkWidget->GetRenderWindow() 是否返回一个有效的指针,而不是

vtkWidget->GetRenderWindow()->AddRenderer(ren);

尝试

vtkRenderWindow * window = vtkWidget->GetRenderWindow();
if(window != nullptr)
{
     window->AddRenderer(ren);
     //etc.

同样的检查也应该应用于 vtkRenderer:

ren = vtkRenderer::New();
if(ren != nullptr)
{
    //etc.

如果您碰巧发现一些空指针,请查看 this post 是否有帮助。

关于c++ - Qt Ros 工作区中的 QVTKWidget 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55587169/

相关文章:

qt - 当图像内容随 QDeclarativeImageProvider 更改时,图像元素不会更新

C++ 每 x 秒调用一个函数

linux - 在 Ubuntu Bash 中,如何将变量与标准输出值进行比较?

linux - 套接字 : bind address not supported by protocol

linux - 为什么内核要使用 copy_to_user() 函数?

c++ - SQLITE:如何在 UPDATE 语句中使用 SELECT 语句更新表?

c++ - 手动执行 exe 时出现运行时错误

c++ - 有没有办法获取使用 Qt 的进程的所有打开文件的列表?

c++ - clock() 函数总是返回 0

c++ - 我_可以_使用什么作为 std::map 键?