QtIndustrialWidgets 2.3.0
Modern, High-Performance Industrial Instruments & SCADA Widgets for Qt
Loading...
Searching...
No Matches
IndustrialKnob.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 IndustrialKnobPrivate;
17
40{
41 Q_OBJECT
42
43 Q_PROPERTY(double minimum READ minimum WRITE setMinimum NOTIFY rangeChanged)
44 Q_PROPERTY(double maximum READ maximum WRITE setMaximum NOTIFY rangeChanged)
45 Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged)
46 Q_PROPERTY(double step READ step WRITE setStep NOTIFY appearanceChanged)
47 Q_PROPERTY(int precision READ precision WRITE setPrecision NOTIFY appearanceChanged)
48 Q_PROPERTY(QString unit READ unit WRITE setUnit NOTIFY appearanceChanged)
49 Q_PROPERTY(double startAngle READ startAngle WRITE setStartAngle NOTIFY appearanceChanged)
50 Q_PROPERTY(double spanAngle READ spanAngle WRITE setSpanAngle NOTIFY appearanceChanged)
51 Q_PROPERTY(int majorTicks READ majorTicks WRITE setMajorTicks NOTIFY appearanceChanged)
52 Q_PROPERTY(int minorTicks READ minorTicks WRITE setMinorTicks NOTIFY appearanceChanged)
53 Q_PROPERTY(KnobMode mode READ mode WRITE setMode NOTIFY modeChanged)
54 Q_PROPERTY(int discreteSteps READ discreteSteps WRITE setDiscreteSteps NOTIFY appearanceChanged)
55 Q_PROPERTY(bool trackVisible READ isTrackVisible WRITE setTrackVisible NOTIFY appearanceChanged)
56 Q_PROPERTY(bool valueDisplayVisible READ isValueDisplayVisible WRITE setValueDisplayVisible NOTIFY appearanceChanged)
57 Q_PROPERTY(QColor knobColor READ knobColor WRITE setKnobColor NOTIFY appearanceChanged)
58 Q_PROPERTY(QColor pointerColor READ pointerColor WRITE setPointerColor NOTIFY appearanceChanged)
59 Q_PROPERTY(QColor scaleColor READ scaleColor WRITE setScaleColor NOTIFY appearanceChanged)
60 Q_PROPERTY(QColor trackColor READ trackColor WRITE setTrackColor NOTIFY appearanceChanged)
61 Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor NOTIFY appearanceChanged)
62
63public:
65 enum class KnobMode {
66 Continuous,
67 Discrete
68 };
69 Q_ENUM(KnobMode)
70
71
75 explicit IndustrialKnob(QWidget *parent = nullptr);
76 ~IndustrialKnob() override;
77
79 [[nodiscard]] double minimum() const;
81 [[nodiscard]] double maximum() const;
83 [[nodiscard]] double value() const;
85 [[nodiscard]] double step() const;
87 [[nodiscard]] int precision() const;
89 [[nodiscard]] QString unit() const;
91 [[nodiscard]] double startAngle() const;
93 [[nodiscard]] double spanAngle() const;
95 [[nodiscard]] int majorTicks() const;
97 [[nodiscard]] int minorTicks() const;
99 [[nodiscard]] KnobMode mode() const;
101 [[nodiscard]] int discreteSteps() const;
103 [[nodiscard]] bool isTrackVisible() const;
105 [[nodiscard]] bool isValueDisplayVisible() const;
106
108 [[nodiscard]] QColor knobColor() const;
110 [[nodiscard]] QColor pointerColor() const;
112 [[nodiscard]] QColor scaleColor() const;
114 [[nodiscard]] QColor trackColor() const;
116 [[nodiscard]] QColor textColor() const;
117
118 [[nodiscard]] QSize sizeHint() const override;
119 [[nodiscard]] QSize minimumSizeHint() const override;
120
121public Q_SLOTS:
123 void setValue(double value);
125 void setMinimum(double min);
127 void setMaximum(double max);
129 void setRange(double min, double max);
131 void setStep(double step);
133 void setPrecision(int precision);
135 void setUnit(const QString &unit);
137 void setStartAngle(double angle);
139 void setSpanAngle(double span);
141 void setMajorTicks(int count);
143 void setMinorTicks(int count);
145 void setMode(KnobMode mode);
147 void setDiscreteSteps(int steps);
149 void setTrackVisible(bool visible);
151 void setValueDisplayVisible(bool visible);
152
154 void setKnobColor(const QColor &color);
156 void setPointerColor(const QColor &color);
158 void setScaleColor(const QColor &color);
160 void setTrackColor(const QColor &color);
162 void setTextColor(const QColor &color);
163
164Q_SIGNALS:
166 void valueChanged(double value);
168 void rangeChanged(double min, double max);
170 void modeChanged(KnobMode mode);
172 void appearanceChanged();
173
174protected:
175 void paintEvent(QPaintEvent *event) override;
176 void resizeEvent(QResizeEvent *event) override;
177 void changeEvent(QEvent *event) override;
178 void mousePressEvent(QMouseEvent *event) override;
179 void mouseMoveEvent(QMouseEvent *event) override;
180 void mouseReleaseEvent(QMouseEvent *event) override;
181 void wheelEvent(QWheelEvent *event) override;
182 void keyPressEvent(QKeyEvent *event) override;
183
184private:
185 void invalidateCache();
186 void renderStaticScale(const QSize &size);
187 [[nodiscard]] double valueToAngle(double val) const;
188 [[nodiscard]] double angleToValue(double angle) const;
189 void updateValueFromPoint(const QPointF &pos);
190
191 std::unique_ptr<IndustrialKnobPrivate> d_ptr;
192 Q_DECLARE_PRIVATE(IndustrialKnob)
193};
194
195} // namespace QtIndustrialWidgets
Precision industrial rotary control potentiometer and selector knob.
Definition IndustrialKnob.h:40
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