2
#include <qwt_compass.h>
3
#include <qwt_compass_rose.h>
4
#include <qwt_dial_needle.h>
5
#include "compass_grid.h"
7
#if QT_VERSION < 0x040000
8
typedef QColorGroup Palette;
10
typedef QPalette Palette;
13
CompassGrid::CompassGrid(QWidget *parent):
16
#if QT_VERSION < 0x040000
17
setBackgroundColor(Qt::gray);
19
QPalette p = palette();
20
p.setColor(backgroundRole(), Qt::gray);
24
#if QT_VERSION >= 0x040100
25
setAutoFillBackground(true);
28
QGridLayout *layout = new QGridLayout(this);
29
layout->setSpacing(5);
33
for ( i = 0; i < 6; i++ )
35
QwtCompass *compass = createCompass(i);
36
layout->addWidget(compass, i / 3, i % 3);
39
#if QT_VERSION < 0x040000
40
for ( i = 0; i < layout->numCols(); i++ )
41
layout->setColStretch(i, 1);
43
for ( i = 0; i < layout->columnCount(); i++ )
44
layout->setColumnStretch(i, 1);
48
QwtCompass *CompassGrid::createCompass(int pos)
53
for ( c = 0; c < Palette::NColorRoles; c++ )
54
colorGroup.setColor((Palette::ColorRole)c, QColor());
56
#if QT_VERSION < 0x040000
57
colorGroup.setColor(Palette::Base, backgroundColor().light(120));
59
colorGroup.setColor(Palette::Base,
60
palette().color(backgroundRole()).light(120));
62
colorGroup.setColor(Palette::Foreground,
63
colorGroup.color(Palette::Base));
65
QwtCompass *compass = new QwtCompass(this);
66
compass->setLineWidth(4);
67
compass->setFrameShadow(
68
pos <= 2 ? QwtCompass::Sunken : QwtCompass::Raised);
75
A compass with a rose and no needle. Scale and rose are
78
compass->setMode(QwtCompass::RotateScale);
80
QwtSimpleCompassRose *rose = new QwtSimpleCompassRose(16, 2);
83
compass->setRose(rose);
89
A windrose, with a scale indicating the main directions only
91
QMap<double, QString> map;
93
map.insert(90.0, "E");
94
map.insert(180.0, "S");
95
map.insert(270.0, "W");
97
compass->setLabelMap(map);
99
QwtSimpleCompassRose *rose = new QwtSimpleCompassRose(4, 1);
100
compass->setRose(rose);
103
new QwtCompassWindArrow(QwtCompassWindArrow::Style2));
104
compass->setValue(60.0);
110
A compass with a rotating needle in darkBlue. Shows
111
a ticks for each degree.
114
colorGroup.setColor(Palette::Base, Qt::darkBlue);
115
colorGroup.setColor(Palette::Foreground,
116
QColor(Qt::darkBlue).dark(120));
117
colorGroup.setColor(Palette::Text, Qt::white);
119
compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
120
compass->setScaleTicks(1, 1, 3);
121
compass->setScale(36, 5, 0);
124
new QwtCompassMagnetNeedle(QwtCompassMagnetNeedle::ThinStyle));
125
compass->setValue(220.0);
132
A compass without a frame, showing numbers as tick labels.
133
The origin is at 220.0
135
#if QT_VERSION < 0x040000
136
colorGroup.setColor(Palette::Base, backgroundColor());
138
colorGroup.setColor(Palette::Base,
139
palette().color(backgroundRole()));
141
colorGroup.setColor(Palette::Foreground, Qt::blue);
143
compass->setLineWidth(0);
145
compass->setScaleOptions(QwtDial::ScaleBackbone |
146
QwtDial::ScaleTicks | QwtDial::ScaleLabel);
147
compass->setScaleTicks(0, 0, 3);
149
QMap<double, QString> map;
150
for ( double d = 0.0; d < 360.0; d += 60.0 )
153
label.sprintf("%.0f", d);
154
map.insert(d, label);
156
compass->setLabelMap(map);
157
compass->setScale(36, 5, 0);
159
compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Ray,
161
compass->setOrigin(220.0);
162
compass->setValue(20.0);
168
A compass showing another needle
170
compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
171
compass->setScaleTicks(0, 0, 3);
173
compass->setNeedle(new QwtCompassMagnetNeedle(
174
QwtCompassMagnetNeedle::TriangleStyle, Qt::white, Qt::red));
175
compass->setValue(220.0);
181
A compass with a yellow on black ray
183
colorGroup.setColor(Palette::Foreground, Qt::black);
185
compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Ray,
187
compass->setValue(315.0);
192
QPalette newPalette = compass->palette();
193
for ( c = 0; c < Palette::NColorRoles; c++ )
195
if ( colorGroup.color((Palette::ColorRole)c).isValid() )
197
for ( int cg = 0; cg < QPalette::NColorGroups; cg++ )
200
(QPalette::ColorGroup)cg,
201
(Palette::ColorRole)c,
202
colorGroup.color((Palette::ColorRole)c));
207
for ( int i = 0; i < QPalette::NColorGroups; i++ )
209
QPalette::ColorGroup cg = (QPalette::ColorGroup)i;
212
newPalette.color(cg, Palette::Base).light(170);
213
const QColor dark = newPalette.color(cg, Palette::Base).dark(170);
214
const QColor mid = compass->frameShadow() == QwtDial::Raised
215
? newPalette.color(cg, Palette::Base).dark(110)
216
: newPalette.color(cg, Palette::Base).light(110);
218
newPalette.setColor(cg, Palette::Dark, dark);
219
newPalette.setColor(cg, Palette::Mid, mid);
220
newPalette.setColor(cg, Palette::Light, light);
222
compass->setPalette(newPalette);