1、主窗口设置
ui.setupUi(this);
this->setWindowTitle("点云处理UI");
this->setGeometry(0, 0, 1200, 900); //设置窗口大小
this->setFixedSize(1200, 900); //设置窗口固定大小
2、pcl的QVTK控件
viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
viewer->setBackgroundColor(0, 0.3, 0.4);
ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow()); //显示视窗放到ui界面
viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());
ui.qvtkWidget->update(); //更新视窗显示
3、菜单栏及其选项
//3、创建菜单栏、下拉框
QMenuBar* menu_bar = new QMenuBar(this); //创建一个菜单栏
this->setMenuBar(menu_bar); //设置为MainWindow的菜单栏
menu_bar->setStyleSheet("font-size : 18px");
//菜单栏-文件项
QMenu* file_menu = new QMenu("文件", menu_bar); //菜单栏创建一个文件项
QAction* open_action = new QAction("读取"); //文件下拉框
file_menu->addAction(open_action);//添加动作到文件项,QAction就会自动变成子菜单
QAction* save_action = new QAction("保存");
file_menu->addAction(save_action);
file_menu->addSeparator(); //添加菜单分隔符
QAction* quit_action = new QAction("退出");
file_menu->addAction(quit_action);
menu_bar->addMenu(file_menu); //最后把文件项添加到菜单栏
4、TreeView树形控件
学习来源:参考博文
Qt中使用model
来管理数据与视图的关系。QT提供了一些现成的models用于处理数据项:
- QStringListModel 用于存储简单的QString列表。
- QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
- QDirModel提供本地文件系统中的文件与目录信息。
- QSqlQueryModel,QSqlTableModel,QSqlRelationTableModel用来访问数据库。
QStandardItemModel *model = new QStandardItemModel(this);
//设置表头隐藏
//ui->treeView->setHeaderHidden(true);
//设置model
ui->treeView->setModel(model);
//设置展开
ui->treeView->expandAll();
//model分级效果
model->setItem(0,0,new QStandardItem("one"));
model->item(0,0)->setChild(0,0,new QStandardItem("二级1"));
model->item(0,0)->setChild(1,0,new QStandardItem("二级2"));
model->setItem(1,0,new QStandardItem("two"));
model->item(1,0)->setChild(0,0,new QStandardItem("二级1"));
//设置可选框
model->item(0,0)->setCheckable(true);
model->item(0,0)->setCheckState(Qt::Checked);
model->item(0,0)->child(0,0)->setCheckable(true);
model->item(0,0)->child(0,0)->setCheckState(Qt::Unchecked);
model->item(0,0)->child(1,0)->setCheckable(true);
model->item(0,0)->child(1,0)->setCheckState(Qt::Checked);
//添加节点
QStandardItem* itemFolder = new QStandardItem(QStringLiteral("cloud%1").arg(cloud_vec.size() - 1));//新建节点
itemFolder->setCheckable(true); //打开复选框
itemFolder->setCheckState(Qt::Checked); //设置选中状态
model->appendRow(itemFolder); //添加到model行