实现效果


步骤拆分
- 首先添加槽函数
- 新建QT class 附带UI文件,文件类型选择弹窗类型
- 加入spinBox和sliderWidget
- 分别设置其最大值和最小值,两个组件数据双向绑定
- 将设置的点大小作为QString传入到点云模型当中去
- 更新所有点云模型点大小
代码实现

#ifndef PCL_POINTSIZE_CHANGE_H
#define PCL_POINTSIZE_CHANGE_H
#include <QDialog>
namespace Ui {
class pcl_pointsize_change;
}
class pcl_pointsize_change : public QDialog
{
Q_OBJECT
public:
explicit pcl_pointsize_change(QWidget *parent = nullptr);
~pcl_pointsize_change();
signals:
void sendData(QString data);
private slots:
void on_buttonBox_accepted();
private:
Ui::pcl_pointsize_change *ui;
};
#endif
#include "pcl_pointsize_change.h"
#include "ui_pcl_pointsize_change.h"
pcl_pointsize_change::pcl_pointsize_change(QWidget *parent) :
QDialog(parent),
ui(new Ui::pcl_pointsize_change)
{
ui->setupUi(this);
ui->spinBox->setMinimum(0);
ui->spinBox->setMaximum(10);
ui->spinBox->setSingleStep(1);
ui->spinBox->setValue(5);
ui->horizontalSlider->setMaximum(10);
ui->horizontalSlider->setMinimum(0);
ui->horizontalSlider->setSingleStep(1);
ui->horizontalSlider->setValue(5);
connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));
connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
}
pcl_pointsize_change::~pcl_pointsize_change()
{
delete ui;
}
void pcl_pointsize_change::on_buttonBox_accepted()
{
QString value=QString("%1").arg(ui->horizontalSlider->value());
emit sendData(value);
this->close();
}
void MainWindow::pointcloud_size_change(){
dialog_slider=new pcl_pointsize_change();
connect(dialog_slider,SIGNAL(sendData(QString)),this,SLOT(Slider_setting(QString)));
if(dialog_slider->exec()==QDialog::Accepted){}
delete dialog_slider;
}
void MainWindow::Slider_setting(QString data){
point_size=data.toInt();
for(int i=0;i<cloud_name.size();i++){
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,point_size,cloud_name[i]);
}
}