#include "mainwindow.h"
#include "ui_mainwindow.h"
//创建菜单栏,工具栏,状态栏应当包含的头文件
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <QStatusBar>
#include <QAbstractAnimation>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_publicIconMap[TREE_ITEM_ICON_DataItem] = QIcon(QStringLiteral("Icons/folder.png"));
model = new QStandardItemModel(ui->treeView);
model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("--cloud--DB-Tree--"));
ui->treeView->setHeaderHidden(true);
ui->treeView->setModel(model);
ui->treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);//设置多选
/**************************************初始化******************************************/
//初始化PCL显示控件
viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
viewer->setBackgroundColor(0.56,0.6,0.623);
ui->qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
viewer->setupInteractor(ui->qvtkWidget->GetInteractor(), ui->qvtkWidget->GetRenderWindow());
ui->qvtkWidget->update();
/**************************************创建菜单******************************************/
QMenuBar *menu_bar = new QMenuBar(this); //创建一个菜单栏
this->setMenuBar(menu_bar); //设置为MainWindow的菜单栏
menu_bar->setStyleSheet("font-size : 18px");
QMenu *file_menu = new QMenu("文件",menu_bar);
QMenu *visualization_menu=new QMenu("显示",menu_bar);
QMenu *filter_menu=new QMenu("滤波",menu_bar);
//**************************************菜单中创建动作******************************************//
//文件下拉框
QAction *open_action = new QAction("读取");
QAction *save_action = new QAction("保存");
QAction *quit_action = new QAction("退出");
file_menu->addAction(open_action);//添加动作到文件菜单,QAction就会自动变成子菜单
file_menu->addAction(save_action);
file_menu->addSeparator(); //添加菜单分隔符
file_menu->addAction(quit_action);
//***********************************菜单添加至菜单栏***************************************//
menu_bar->addMenu(file_menu);//把菜单添加到菜单栏
//***********************************connect设置*******************************************//
//------------------------------------------------------------------
//文件
connect(open_action,SIGNAL(triggered()),this,SLOT(Open_clicked()));//读取文件
connect(save_action,SIGNAL(triggered()),this,SLOT(Save_clicked()));//保存文件
connect(quit_action,SIGNAL(triggered()),this,SLOT(close()));
//------------------------------------------------------------------
//filter
//------------------------------------------------------------------
//visualization
}
MainWindow::~MainWindow()
{
delete ui;
}
//-------------------------------------function----------------------------------------------------//
//读取有逗号的xyzi
pcl::PointCloud<pcl::PointXYZI>::Ptr get_pointcloud_from_txt(const std::string& file_path)
{
pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>);
std::ifstream file(file_path.c_str());//c_str():生成一个const char*指针,指向以空字符终止的数组。
while (file)
{
std::string s;
if (!getline(file, s)) break;
std::istringstream ss(s);
std::vector <std::string> record;
std::vector <float> point;
pcl::PointXYZI p;
while (ss)
{
std::string s;
if (!getline(ss, s, ',')) break;
point.push_back(atof(s.c_str()));
}
p.x = point[0];
p.y = point[1];
p.z = point[2];
p.intensity = point[3];
cloud->push_back(p);
}
file.close();
return cloud;
}
//-------------------------------------file-----------------------------------------------------
//读取点云
void MainWindow::Open_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("open file"),
"", tr("pcb files(*.pcd *.ply *.xyz) ;;All files (*.*)"));
if(fileName.isEmpty())
{
return;
}
if(fileName.endsWith("ply"))
{
qDebug()<<fileName;
if (pcl::io::loadPLYFile<pcl::PointXYZI>(fileName.toStdString(), cloud) == -1) //* load the file
{
qDebug()<<"Couldn't read file \n";
return ;
}
}
else if (fileName.endsWith("pcd"))
{
qDebug()<<fileName;
if (pcl::io::loadPCDFile<pcl::PointXYZI>(fileName.toStdString(), cloud) == -1) //* load the file
{
qDebug()<<"Couldn't read pcd file \n";
return ;
}
}
else if (fileName.endsWith("xyz"))
{
QFuture<pcl::PointCloud<pcl::PointXYZI>::Ptr> future =
QtConcurrent::run(get_pointcloud_from_txt,std::string(fileName.toStdString()));
while(!future.isFinished())
{
QApplication::processEvents(QEventLoop::AllEvents, 100);
}
auto cloud_out=future.result();
cloud=*cloud_out;
}
else {
QMessageBox::warning(this, "Warning","点云读取格式错误!");
}
//-----------------------------------------------------
cloud_vec.push_back(cloud.makeShared());
cloud_index.push_back(1);
itemFolder = new QStandardItem(m_publicIconMap[QStringLiteral("treeItem_folder")],QStringLiteral("cloud%1").arg(cloud_vec.size()-1));
itemFolder->setCheckable(true);
itemFolder->setCheckState(Qt::Checked);//获取选中状态
model->appendRow(itemFolder);
// item = new QStandardItem(m_publicIconMap[QStringLiteral("treeItem_dataItem")],QStringLiteral("%1").arg(cloud_vec.size()-1));
// item->setCheckable(true);
// item->setCheckState(Qt::Checked);//获取选中状态
// itemFolder->appendRow(item);
//-----------------------------------------------------------
int size = static_cast<int>(cloud.size());
QString PointSize = QString("%1").arg(size);
ui->textBrowser_2->clear();
ui->textBrowser_2->insertPlainText("点云数量: "+PointSize);
ui->textBrowser_2->setFont(QFont( "Arial" , 9 ,QFont::Normal ));
//-----------------------------------------------------------------
//移除窗口点云
//点云设置
pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZI>render(cloud.makeShared(), "intensity");
viewer->addPointCloud<pcl::PointXYZI>(cloud.makeShared(),render,std::to_string(cloud_vec.size()-1));
//设置点云大小
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, point_size, std::to_string(cloud_vec.size()-1));
viewer->resetCamera();
ui->qvtkWidget->update();
}
void MainWindow::Save_clicked()
{
QString filename = QFileDialog::getSaveFileName(this, tr ("Open point cloud"), "", tr ("Point cloud data (*.pcd *.ply)"));
if(cloud.empty())
{
return;
}
else
{
if (filename.isEmpty ())
return;
int return_status;
if (filename.endsWith (".pcd", Qt::CaseInsensitive))
return_status = pcl::io::savePCDFileBinary (filename.toStdString (), *cloud.makeShared());
else if (filename.endsWith (".ply", Qt::CaseInsensitive))
return_status = pcl::io::savePLYFileBinary (filename.toStdString (), *cloud.makeShared());
else
{
filename.append(".ply");
return_status = pcl::io::sa
没有合适的资源?快使用搜索试试~ 我知道了~
PCL+QT源码:增加树形控件
共3896个文件
idx:3819个
qm:22个
dll:20个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 35 下载量 159 浏览量
2022-06-14
13:52:37
上传
评论 1
收藏 20.4MB 7Z 举报
温馨提示
PCL+QT源码:增加树形控件 主要功能: - 显示多片点云,并自动更新节点信息 - 选择相关节点时,会自动更新参数(点云数量)信息 - 勾选复选框时,会显示点云,不勾选时,点云不显示。
资源推荐
资源详情
资源评论
收起资源包目录
PCL+QT源码:增加树形控件 (3896个子文件)
pcl_test.pro.user.4.8-pre1 23KB
mainwindow.cpp 10KB
qrc_rsc.cpp 9KB
moc_mainwindow.cpp 4KB
main.cpp 357B
pcl_function.cpp 124B
Makefile.Debug 827KB
opengl32sw.dll 19.95MB
Qt5Gui.dll 6.76MB
Qt5Core.dll 5.72MB
Qt5Widgets.dll 5.26MB
D3Dcompiler_47.dll 3.98MB
libGLESv2.dll 3.21MB
qwindows.dll 1.42MB
qwebp.dll 495KB
qjpeg.dll 409KB
qtiff.dll 379KB
Qt5Svg.dll 322KB
qwindowsvistastyle.dll 140KB
qicns.dll 44KB
qsvgicon.dll 40KB
qgif.dll 37KB
qico.dll 36KB
qtga.dll 30KB
qwbmp.dll 28KB
qsvg.dll 27KB
libEGL.dll 23KB
pcl_test.exe 177KB
ui_mainwindow.h 5KB
mainwindow.h 2KB
pcl_function.h 753B
moc_predefs.h 228B
tech.ico 1KB
tech.ico 1KB
winnt.h.3F36B4D748C06CFE.idx 450KB
error_codes.hpp.C7164A5065A9D77F.idx 410KB
wingdi.h.DB9D17A09223ED35.idx 329KB
GeneralBlockPanelKernel.h.5DC2AEEAB2530702.idx 234KB
GeneralBlockPanelKernel.h.E72C53CE1704FA6C.idx 233KB
CoreEvaluators.h.81BA061069BFB236.idx 194KB
implementation.hpp.D943AFBEF87DD0B9.idx 193KB
point_types.hpp.BBDADF740051F87A.idx 191KB
CoreEvaluators.h.D08848A1E71E15D0.idx 189KB
function_template.hpp.01BE7AE9C37B98AE.idx 186KB
has_binary_operator.hpp.2E909B767631F425.idx 181KB
winerror.h.4DA7EA8F8AD523FC.idx 181KB
eigen.hpp.7688588434D71EB8.idx 151KB
emmintrin.h.3B09679DE2597FB0.idx 149KB
qnamespace.h.CF41432CB62662A2.idx 146KB
qmetatype.h.7893870BFDD1F7A9.idx 136KB
qstring.h.DC63E695B8303FD1.idx 134KB
bind.hpp.2BFDD8CF95B8CC5C.idx 132KB
bind.hpp.CE8F8B044EEBC358.idx 130KB
SelfadjointMatrixMatrix.h.E3AA90DB2AA5A2FE.idx 128KB
SelfadjointMatrixMatrix.h.5BD48AECBC08C83E.idx 128KB
vtkGenericDataArray.txx.C539B05C9062ADFE.idx 122KB
point_struct_traits.h.AF8CF84CF2601C77.idx 119KB
qhash.h.8BFE4CF1438708D8.idx 113KB
complex.24E63029838E94A9.idx 111KB
ProductEvaluators.h.AAEF142C3812C866.idx 103KB
PlainObjectBase.h.7E05AFE778E60ACC.idx 99KB
PlainObjectBase.h.756821EBCDF43824.idx 99KB
qvector.h.DBF985B2AE0A545C.idx 98KB
ProductEvaluators.h.F9ED5F00CAA61953.idx 98KB
pcl_visualizer.hpp.6EBA92A4FE9C334F.idx 97KB
BDCSVD.h.BB5D99DBBDDB41C3.idx 92KB
BDCSVD.h.AE2D03E824B14E42.idx 91KB
GeneralMatrixVector.h.1E82F118C7617D00.idx 90KB
future.hpp.142DC07A0AE9D449.idx 89KB
win32_api.hpp.189D33D7AAF5F035.idx 87KB
GeneralMatrixVector.h.8FC1936F4C26BCEE.idx 87KB
vtkGenericDataArray.txx.C8F569EDB2A8CC26.idx 87KB
qmap.h.33950EE1CAEC44D2.idx 85KB
xmmintrin.h.45F96C6955EA2A84.idx 84KB
qlocale.h.23AEC99DB28D94FD.idx 82KB
qlist.h.AD66F2FC492EEBDA.idx 82KB
pcd_io.hpp.B035D4D1004CAB9B.idx 78KB
qtconcurrentstoredfunctioncall.h.92007B4DD4CCF6F9.idx 76KB
register_point_struct.h.CFF3031FB7D25825.idx 76KB
auto_buffer.hpp.B7FB40E158FF8AE7.idx 75KB
auto_buffer.hpp.B3AEF10C0558485A.idx 74KB
operators.hpp.8C03B03E0AF0A807.idx 73KB
vector.7F1AB4DC8E764E95.idx 73KB
register_point_struct.h.8822E8A57A58E565.idx 73KB
Transform.h.ACE7109D1D485EDF.idx 72KB
Transform.h.C8C07EE84A668E98.idx 72KB
operators.hpp.D24CD98DBD35D6F5.idx 71KB
SelfAdjointEigenSolver.h.6AC07594F56F8EF2.idx 69KB
time_facet.hpp.2F5B34277609CBEC.idx 69KB
concept_check.hpp.ED6A2CCEAC6520B1.idx 68KB
ppltasks.h.E717B785C0CE94A7.idx 68KB
SelfAdjointEigenSolver.h.90058B00CC2CD473.idx 67KB
MathFunctions.h.96F11799E962CF5A.idx 67KB
Block.h.779D9C03E28D6B8B.idx 66KB
Block.h.C2D1485C66A530BD.idx 66KB
MathFunctions.h.DD2F256FC42DDD45.idx 65KB
qstyleoption.h.EF45394F5D6912A6.idx 65KB
win32_api.hpp.5F13685C085E0874.idx 65KB
JacobiSVD.h.7AE3360FE2D260DD.idx 65KB
JacobiSVD.h.727A25B013657E44.idx 65KB
共 3896 条
- 1
- 2
- 3
- 4
- 5
- 6
- 39
小修勾
- 粉丝: 4327
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页