QwtScaleWidget is the display widget for axes, responsible for drawing tick marks, tick labels, and axis titles. It is a fundamental component of the QwtPlot axis system and also supports standalone use.
Main Features
Features
- ✅ Tick drawing: Draws major ticks, minor ticks, and tick labels
- ✅ Axis title: Supports displaying axis title text
- ✅ Built-in interaction: Supports mouse drag panning and scroll wheel zooming (new in Qwt7)
- ✅ Color bar: Supports displaying color bars (for spectrograms)
- ✅ Style customization: Customizable tick length, label font, etc.
Basic Concepts
Axis Position
Qwt uses the QwtAxis::Position enum to identify axis positions:
| Position |
Enum Value |
Description |
| Bottom X-axis |
QwtAxis::XBottom |
Bottom horizontal axis |
| Top X-axis |
QwtAxis::XTop |
Top horizontal axis |
| Left Y-axis |
QwtAxis::YLeft |
Left vertical axis |
| Right Y-axis |
QwtAxis::YRight |
Right vertical axis |
Axis Structure
| Title
Time(s)
↓
────────┼────┼────┼────┼────→ Tick marks
0 2 4 6 8 Tick labels
Ticks are divided into: major ticks (long), minor ticks (short)
|
Usage
1. Setting Axes via QwtPlot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #include <QwtPlot>
QwtPlot* plot = new QwtPlot();
// Set axis titles
plot->setAxisTitle(QwtAxis::XBottom, "Time (s)");
plot->setAxisTitle(QwtAxis::YLeft, "Voltage (V)");
// Set axis ranges
plot->setAxisScale(QwtAxis::XBottom, 0, 100); // X-axis 0-100
plot->setAxisScale(QwtAxis::YLeft, -10, 10); // Y-axis -10 to 10
// Set axis visibility
plot->setAxisVisible(QwtAxis::XTop, false); // Hide top X-axis
plot->setAxisVisible(QwtAxis::YRight, true); // Show right Y-axis
plot->replot();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | // Get axis widget at a specific position
QwtScaleWidget* scaleWidget = plot->axisWidget(QwtAxis::XBottom);
// Set tick label font
scaleWidget->setFont(QFont("Arial", 8));
// Set axis title style
QwtText title("Time (s)");
title.setFont(QFont("Arial", 10, QFont::Bold));
title.setColor(Qt::darkBlue);
scaleWidget->setTitle(title);
// Set tick color
scaleWidget->setPalette(QPalette(Qt::black));
|
3. Built-in Interaction Features (New in Qwt7)
Qwt 7.0 adds built-in axis interaction features, supporting direct panning and zooming on axes:
1
2
3
4
5
6
7
8
9
10
11
12 | // Get axis widget
QwtScaleWidget* scaleWidget = plot->axisWidget(QwtAxis::XBottom);
// Enable built-in panning
scaleWidget->setBuiltInAction(QwtScaleWidget::Pan, true);
// Enable built-in zooming
scaleWidget->setBuiltInAction(QwtScaleWidget::Zoom, true);
// Set interaction mouse buttons
scaleWidget->setActionButton(Qt::LeftButton); // Left button drag panning
scaleWidget->setActionButtons(Qt::MiddleButton, Qt::ControlModifier); // Ctrl+middle button zooming
|
Panning effect:

Zooming effect:

For detailed axis interaction documentation, refer to: Axis Interaction Actions
4. Color Bar Display
Used for scenarios requiring color mapping such as spectrograms:
1
2
3
4
5
6
7
8
9
10
11
12 | // Enable color bar
scaleWidget->setColorBarEnabled(true);
// Set color bar width
scaleWidget->setColorBarWidth(20);
// Set color map
QwtLinearColorMap* colorMap = new QwtLinearColorMap(Qt::blue, Qt::red);
scaleWidget->setColorMap(QwtInterval(0, 100), colorMap);
// Set color bar position
scaleWidget->setColorBarPosition(QwtScaleWidget::Right); // On the right side of ticks
|
5. Tick Drawing Style
| // Set tick position (relative to axis direction)
scaleWidget->setTickPosition(QwtScaleWidget::Outside); // Ticks on outside
// Other options: Inside (inside), Both (both sides)
// Set tick length
scaleWidget->setMajorTickLength(10); // Major tick length (pixels)
scaleWidget->setMinorTickLength(5); // Minor tick length (pixels)
// Set tick margin
scaleWidget->setTickMargin(2); // Distance between ticks and axis line
|
Customize tick label format by setting QwtScaleDraw:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #include <QwtScaleDraw>
// Custom tick drawing
class MyScaleDraw : public QwtScaleDraw
{
public:
virtual QwtText label(double value) const override
{
// Custom label format
return QwtText(QString::number(value, 'f', 1)); // Keep 1 decimal place
}
};
// Apply custom tick drawing
scaleWidget->setScaleDraw(new MyScaleDraw());
|
7. Setting Tick Division
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #include <QwtScaleDiv>
#include <QwtScaleEngine>
// Use automatic scale engine
plot->setAxisAutoScale(QwtAxis::XBottom); // Automatically calculate ticks
// Manually set tick division
QwtScaleDiv scaleDiv;
scaleDiv.setInterval(0, 100);
QList<double> majorTicks;
majorTicks << 0 << 25 << 50 << 75 << 100;
scaleDiv.setTicks(QwtScaleDiv::MajorTick, majorTicks);
plot->setAxisScaleDiv(QwtAxis::XBottom, scaleDiv);
|
Core Method Summary
QwtPlot Axis Methods
| Method |
Description |
setAxisTitle() |
Set axis title |
setAxisScale() |
Set axis range |
setAxisAutoScale() |
Enable auto scaling |
setAxisVisible() |
Set axis visibility |
axisWidget() |
Get axis widget |
setAxisMaxMajor() |
Set maximum number of major ticks |
setAxisMaxMinor() |
Set maximum number of minor ticks |
| Method |
Description |
setTitle() |
Set axis title |
setFont() |
Set label font |
setBuiltInAction() |
Enable built-in interaction |
setColorBarEnabled() |
Enable color bar |
setColorMap() |
Set color map |
setTickPosition() |
Set tick position |
setScaleDraw() |
Set scale draw object |
Axis Configuration Recommendations
- For numeric axes, automatic scaling meets most needs
- For time axes, use
QwtDateScaleEngine
- For logarithmic axes, use
QwtLogScaleEngine
Related Examples
- Axis interaction: Multiple examples in
examples/2D
- Color bar:
examples/2D/spectrogram
- Tick demo:
playground/scaleengine