Add live cursor-coordinate readout to the element editor status bar (#580)

Displays the cursor's scene position (same grid units as the parts'
X/Y property spinboxes) in a permanent status bar label, updated on
every mouse move. Addresses the overlapping-node mis-click case from
the originating forum report: with a live readout, precise pointing
no longer requires guessing against nearby z-ordered points.

ElementScene::mouseMoveEvent already computed the (optionally
grid-snapped) scene position on every move; it now also emits it via
a new mouseMoved(QPointF) signal, which QETElementEditor's status bar
label subscribes to.
This commit is contained in:
ispyisail
2026-08-01 15:12:44 +12:00
parent 031441884a
commit 9637f0ff9e
4 changed files with 17 additions and 0 deletions
+3
View File
@@ -124,6 +124,7 @@ void ElementScene::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
if (m_event_interface) {
if (m_event_interface -> mouseMoveEvent(e)) {
emit mouseMoved(e -> scenePos());
if (m_event_interface->isFinish()) {
delete m_event_interface;
m_event_interface = nullptr;
@@ -136,6 +137,8 @@ void ElementScene::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
if (!(e -> modifiers() & Qt::ControlModifier))
event_pos = snapToGrid(event_pos);
emit mouseMoved(event_pos);
if (m_behavior == PasteArea) {
QRectF current_rect(m_paste_area -> rect());
current_rect.moveCenter(event_pos);
+2
View File
@@ -179,6 +179,8 @@ class ElementScene : public QGraphicsScene
void elementInfoChanged();
/// Signal emitted when the element type changes
void elementTypeChanged();
/// Signal emitted with the current cursor position (scene coordinates) on every mouse move
void mouseMoved(const QPointF &pos);
};
Q_DECLARE_OPERATORS_FOR_FLAGS(ElementScene::ItemOptions)
+10
View File
@@ -1194,6 +1194,16 @@ void QETElementEditor::initGui()
if (te) te->refreshMasterLabelVisibility();
});
//Live cursor position readout, in the same scene coordinates as the parts' X/Y properties
m_position_label = new QLabel(this);
m_position_label->setMinimumWidth(120);
statusBar()->addPermanentWidget(m_position_label);
connect(m_elmt_scene, &ElementScene::mouseMoved, this, [this](const QPointF &pos) {
m_position_label->setText(tr("X: %1 Y: %2")
.arg(pos.x(), 0, 'f', 1)
.arg(pos.y(), 0, 'f', 1));
});
statusBar()->showMessage(tr("Éditeur d'éléments", "status bar message"));
}
+2
View File
@@ -161,6 +161,8 @@ class QETElementEditor : public QMainWindow
QLabel *m_default_informations = nullptr;
QLabel *m_position_label = nullptr;
};
#endif // QETELEMENTEDITOR_H