Temporary workaround the selection item emitting way too many signals

This commit is contained in:
Mael Rouxel-Labbé 2023-07-19 10:47:17 +02:00
parent 829e8095ed
commit 7ec586ca73
1 changed files with 19 additions and 11 deletions

View File

@ -605,18 +605,25 @@ private:
sm_item->setRenderingMode(GouraudPlusEdges); sm_item->setRenderingMode(GouraudPlusEdges);
sm_item->redraw(); sm_item->redraw();
scene->addItem(heat_item); auto heat_item_id = scene->addItem(heat_item);
scene->setSelectedItem(scene->item_id(sm_item)); scene->setSelectedItem(heat_item_id);
// any change of sm_item destroys everything // any change of sm_item destroys everything
connect(sm_item, &Scene_surface_mesh_item::itemChanged,
this, [this, sm_item, heat_item]() // @todo do not emit itemChanged when the colors are reset
{ // @todo with qt6, single connection can be performed with `static_cast<Qt::ConnectionType>(Qt::SingleShotConnection)`
sm_item->resetColors(); // see https://www.kdab.com/single-shot-connections/
removePluginProperties(sm_item); auto connection = std::make_shared<QMetaObject::Connection>();
scene->erase(scene->item_id(heat_item)); *connection = connect(sm_item, &Scene_surface_mesh_item::itemChanged,
onItemIndicesSelected(scene->selectionIndices()); this, [this, sm_item, heat_item, connection]()
}); {
QObject::disconnect(*connection);
sm_item->resetColors();
removePluginProperties(sm_item);
scene->erase(scene->item_id(heat_item));
onItemIndicesSelected(scene->selectionIndices());
});
connect(sm_item, &Scene_surface_mesh_item::aboutToBeDestroyed, connect(sm_item, &Scene_surface_mesh_item::aboutToBeDestroyed,
this, [this, heat_item]() this, [this, heat_item]()
@ -765,7 +772,8 @@ private Q_SLOTS:
Scene_polyhedron_selection_item* source_vertices = new Scene_polyhedron_selection_item(sm_item, mw); Scene_polyhedron_selection_item* source_vertices = new Scene_polyhedron_selection_item(sm_item, mw);
source_vertices->setName(tr("%1 (source vertices)").arg(sm_item->name())); source_vertices->setName(tr("%1 (source vertices)").arg(sm_item->name()));
scene->addItem(source_vertices); auto source_vertices_id = scene->addItem(source_vertices);
scene->setSelectedItem(source_vertices_id);
link_mesh_and_selection(sm_item, source_vertices); link_mesh_and_selection(sm_item, source_vertices);