Встраивание средства просмотра PCL в главное окно графического интерфейса Qt

Я пытаюсь разработать пользовательский интерфейс с помощью QtCreator на 64-разрядной машине с Windows 7. Этот пользовательский интерфейс будет развернут на 32-разрядной машине с Windows 7 и будет управлять проектором и камерой для приложения структурированного освещения. По независящим от меня причинам (совместимость с API камеры и проектора) я буду использовать для этого 32-битный компилятор MS VS 2010. После пары недель попыток наладить совместную работу всего, что мне нужно (Qt 4.8.4, QtCreator и Point Cloud Library), я столкнулся с небольшой проблемой.

Есть ли способ встроить средство просмотра облаков точек PCL в главное окно графического интерфейса Qt? Проблема в том, что когда я использую программу просмотра PCL, она открывает отдельное окно. Я хочу, чтобы это окно было встроено в мое главное окно, и я хочу по-прежнему иметь возможность взаимодействовать с ним (вращать, панорамировать, масштабировать и т. Д.).

Как вы можете понять из моего сообщения, я новичок в Qt / PCL / и т. Д., Поэтому мы будем очень признательны за любой пример с минимальным кодом для этого. Я провел несколько недель исследований по этому поводу, и мне не удалось найти решение, хотя у меня сложилось впечатление, что виджет Qt может быть подходящим вариантом.


person DART    schedule 17.04.2013    source источник


Ответы (2)


Вы можете просто использовать PCLVisualizer, который подробно описан здесь через QVTKWidget. Это установка, которую я сейчас запускаю. Таким образом, вы в конечном итоге сделаете что-то вроде следующего (псевдо) кода:

В шапке:

class PointCloudWidget : public QVTKWidget
{
    //Whatever comes before (constructor, methods, etc.)

private:

    pcl::visualization::PCLVisualizer m_visualizer;
};

И в вашем cpp:

PointCloudWidget::PointCloudWidget(QWidget *parent) : QVTKWidget(parent)
{
    this->SetRenderWindow(m_visualizer.getRenderWindow());
}

Затем вы можете использовать визуализатор для достижения той же функциональности, что и программа просмотра PCL.

person Bart    schedule 17.04.2013
comment
И здесь - это более подробный код. - person Fei; 18.04.2013
comment
Это не удается с PCL 1.9.1 и vtk 8.2 из-за неполного типа vtkRenderWindow. Для каких версий это было скомпилировано? - person oarfish; 21.01.2020
comment
Обновление: по-видимому, один мус #include <vtkRenderWindow.h> в дополнение к заголовкам pcl, чтобы ошибка исчезла. Возможно, заголовок pcl_visualizer.h использует только форвардные объявления. - person oarfish; 21.01.2020

Посмотрите, какой минимальный код я поместил сюда (средство просмотра PCL с минимальным кодом Qt GUI). Есть некоторые повторы, но код, на мой взгляд, довольно прост.

Основная идея - поместить файлы в одну папку и запустить проект из CMakeLists.txt (мастер Qt cmake).

Я использую каталог build внутри каталога проекта. (это важно, потому что в pclwindow.cpp я жестко запрограммировал путь к сгенерированному файлу #include "build/ui_pclwindow.h"

Если приложение строится, но вылетает, вам, вероятно, потребуется добавить некоторые зависимости (например, файлы DLL на платформе Win)

Надеюсь, это даст вам быстрый и простой старт!

person Jun Murakami    schedule 05.04.2014