Ideally this would be at least 5.9 (the minimum Qt version supported),
but unfortunately the Qwt libraries utilise QString::null in public
headers which was deprecated in Qt 5.9.
I've got a feeling Qwt is going to be a pain point once again when
Qt6 rolls around...
Note: it's highly likely there's a bug here, and we should be
using the (tight)boundingRect of the string here instead of the
width/horizontalAdvance. But doing so changes the rendering position
of characters substantially, as it means that font markers are
properly centered on the actual character itself (otherwise
a character like '.' is not placed over the point itself, but
rather below it! iThat's the current behavior).
We could possibly handle this by only applying the improved
positioning to newly created font marker symbols, but that's
left for a follow-up work...
There's NO way to recenter the map on the GPS location, which is a
HUGE ux limitation in QGIS' GPS handling. This commit adds a new
"Recenter" button to the panel to allow users to jump right to
the current GPS position.
Only allow evaluation of number-like strings as numbers when
we aren't comparing two strings (matches behavior with other
expression comparison functions like equals)
Fixes#34314
The strategy is the same as the one used when exporting svg marker symbol, ie simply use the map unit scale factor to scale the marker.
Should fix#28854.
On touch screen devices, we can't show the GPS distance status bar message
as the cursor moves (because there's no "hover" mouse move events to trigger
this from). So for these devices, use a tap-and-hold event to trigger the
"current GPS distance from finger" status bar message.
Fixes#34122
The original implementation was storing the styles
in an hash keyed by the row number from the model
index, but that one changes when the table is reloaded.
By using feature id as a key instead, the style association
with the feature is maintained through sort/reload
operations.
Fixes#34269
By moving the refreshMergedValue() at the end of
createTableWidgetContents() we set the correct
behavior (skipped, manual etc.) after it has been
possibly changed to "manual" a few lines above.
The previous implementation was settings the values
to "skipped" then calling refreshMergedValue(), then
possibly changing to "manual" without refereshing
the merged values, this was the source of the issue.