QtIndustrialWidgets 2.3.0
Modern, High-Performance Industrial Instruments & SCADA Widgets for Qt
Loading...
Searching...
No Matches
Compass.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 Paolo Sereno <paolomsereno@gmail.com>
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7#pragma once
8
10#include <QtWidgets/QWidget>
11#include <QtGui/QColor>
12#include <memory>
13
14namespace QtIndustrialWidgets {
15
16class CompassPrivate;
17
48class QTINDUSTRIALWIDGETS_EXPORT Compass : public QWidget
49{
50 Q_OBJECT
51
52 Q_PROPERTY(double heading READ heading WRITE setHeading NOTIFY headingChanged)
53 Q_PROPERTY(double targetHeading READ targetHeading WRITE setTargetHeading NOTIFY targetHeadingChanged)
54 Q_PROPERTY(DisplayMode displayMode READ displayMode WRITE setDisplayMode NOTIFY displayModeChanged)
55 Q_PROPERTY(bool headingBugVisible READ isHeadingBugVisible WRITE setHeadingBugVisible NOTIFY appearanceChanged)
56 Q_PROPERTY(bool headingBugInteractive READ isHeadingBugInteractive WRITE setHeadingBugInteractive NOTIFY appearanceChanged)
57 Q_PROPERTY(bool lubberLineVisible READ isLubberLineVisible WRITE setLubberLineVisible NOTIFY appearanceChanged)
58 Q_PROPERTY(bool digitalReadoutVisible READ isDigitalReadoutVisible WRITE setDigitalReadoutVisible NOTIFY appearanceChanged)
59 Q_PROPERTY(double courseDeviation READ courseDeviation NOTIFY headingChanged)
60
61 Q_PROPERTY(QColor dialColor READ dialColor WRITE setDialColor NOTIFY appearanceChanged)
62 Q_PROPERTY(QColor bezelColor READ bezelColor WRITE setBezelColor NOTIFY appearanceChanged)
63 Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor NOTIFY appearanceChanged)
64 Q_PROPERTY(QColor cardinalColor READ cardinalColor WRITE setCardinalColor NOTIFY appearanceChanged)
65 Q_PROPERTY(QColor needleColor READ needleColor WRITE setNeedleColor NOTIFY appearanceChanged)
66 Q_PROPERTY(QColor needleTailColor READ needleTailColor WRITE setNeedleTailColor NOTIFY appearanceChanged)
67 Q_PROPERTY(QColor bugColor READ bugColor WRITE setBugColor NOTIFY appearanceChanged)
68 Q_PROPERTY(QColor lubberColor READ lubberColor WRITE setLubberColor NOTIFY appearanceChanged)
69
70public:
72 enum class DisplayMode {
73 HeadingUp,
74 NorthUp
75 };
76 Q_ENUM(DisplayMode)
77
78
82 explicit Compass(QWidget *parent = nullptr);
83 ~Compass() override;
84
86 [[nodiscard]] double heading() const;
88 [[nodiscard]] double targetHeading() const;
90 [[nodiscard]] DisplayMode displayMode() const;
92 [[nodiscard]] bool isHeadingBugVisible() const;
94 [[nodiscard]] bool isHeadingBugInteractive() const;
96 [[nodiscard]] bool isLubberLineVisible() const;
98 [[nodiscard]] bool isDigitalReadoutVisible() const;
99
104 [[nodiscard]] double courseDeviation() const;
105
107 [[nodiscard]] static double normalizeDegrees(double deg);
108
109 // Styling colors
110 [[nodiscard]] QColor dialColor() const;
111 [[nodiscard]] QColor bezelColor() const;
112 [[nodiscard]] QColor textColor() const;
113 [[nodiscard]] QColor cardinalColor() const;
114 [[nodiscard]] QColor needleColor() const;
115 [[nodiscard]] QColor needleTailColor() const;
116 [[nodiscard]] QColor bugColor() const;
117 [[nodiscard]] QColor lubberColor() const;
118
119 [[nodiscard]] QSize sizeHint() const override;
120 [[nodiscard]] QSize minimumSizeHint() const override;
121
122public Q_SLOTS:
124 void setHeading(double heading);
126 void setTargetHeading(double targetHeading);
128 void setDisplayMode(DisplayMode mode);
130 void setHeadingBugVisible(bool visible);
132 void setHeadingBugInteractive(bool interactive);
134 void setLubberLineVisible(bool visible);
136 void setDigitalReadoutVisible(bool visible);
137
138 void setDialColor(const QColor &color);
139 void setBezelColor(const QColor &color);
140 void setTextColor(const QColor &color);
141 void setCardinalColor(const QColor &color);
142 void setNeedleColor(const QColor &color);
143 void setNeedleTailColor(const QColor &color);
144 void setBugColor(const QColor &color);
145 void setLubberColor(const QColor &color);
146
147Q_SIGNALS:
149 void headingChanged(double heading);
151 void targetHeadingChanged(double targetHeading);
153 void displayModeChanged(DisplayMode mode);
155 void appearanceChanged();
156
157protected:
158 void paintEvent(QPaintEvent *event) override;
159 void resizeEvent(QResizeEvent *event) override;
160 void changeEvent(QEvent *event) override;
161 void mousePressEvent(QMouseEvent *event) override;
162 void mouseMoveEvent(QMouseEvent *event) override;
163 void mouseReleaseEvent(QMouseEvent *event) override;
164
165private:
166 void invalidateCache();
167 void renderCompassCard(const QSize &size);
168 [[nodiscard]] double angleFromPoint(const QPointF &pos) const;
169
170 std::unique_ptr<CompassPrivate> d_ptr;
171 Q_DECLARE_PRIVATE(Compass)
172};
173
174} // namespace QtIndustrialWidgets
Marine gyrocompass and aeronautical heading indicator instrument.
Definition Compass.h:49
Definition AnalysisChart.h:21
Library export macros and version definitions for QtIndustrialWidgets.
#define QTINDUSTRIALWIDGETS_EXPORT
Export/import macro for shared library symbol visibility across dynamic linking boundaries.
Definition qtindustrialwidgets_global.h:25