Qwt

Présentation

Qwt (ou Qt Widgets for Technical Applications) est un jeu de widgets pour Qt, de composants GUI (Graphical User Interface) et de classes principalement utiles pour des programmes techniques.

Exemples :

Liens :

Installation

  • Ubuntu 12.04 LTS

Vérifier si les packages sont installés (Ubuntu 12.04 LTS) :

$ dpkg -l | grep -i qwt
ii  libqwt-dev                                  6.0.0-1ubuntu1.12.04.1                               Qt widgets library for technical applications (development)
ii  libqwt-doc                                  6.0.0-1ubuntu1.12.04.1                               Qt widgets library for technical applications (documentation)
ii  libqwt6                                     6.0.0-1ubuntu1.12.04.1                               Qt widgets library for technical applications (runtime)

Sinon les installer (Ubuntu 12.04 LTS) :

$ sudo apt-get install libqwt6 libqwt-dev libqwt-doc

Où sont situés les fichiers de documentation et les exemples ?

$ dpkg -S libqwt-doc | head -5
libqwt-doc: /usr/share/doc/libqwt-doc/examples/rasterview/main.cpp
libqwt-doc: /usr/share/doc/libqwt-doc/examples/rasterview/plot.cpp
libqwt-doc: /usr/share/doc/libqwt-doc/html/controlscreenshots.html
libqwt-doc: /usr/share/doc/libqwt-doc/html/functions.html
libqwt-doc: /usr/share/doc/libqwt-doc/examples/friedberg

Les widgets de Qwt sont maintenant disponibles Qt Designer :

  • Ubuntu 16.04 et 18.04 LTS

Vérifier si les packages sont installés (Ubuntu 18.04 LTS) :

$ dpkg -l | grep -i qwt
ii  libqwt-doc                                    6.1.3-1                                          all          Qt widgets library for technical applications (documentation)
ii  libqwt-headers                                6.1.3-1                                          amd64        Qt widgets library for technical applications (header files)
ii  libqwt-qt5-6                                  6.1.3-1                                          amd64        Qt widgets library for technical applications (runtime, qt5)
ii  libqwt-qt5-dev                                6.1.3-1                                          amd64        Qt widgets library for technical applications (development, qt5)
ii  libqwt5-qt4                                   5.2.3-1                                          amd64        Qt4 widgets library for technical applications (runtime)
ii  libqwt6abi1                                   6.1.3-1                                          amd64        Qt widgets library for technical applications (runtime, qt4)

Sinon les installer (Ubuntu 18.04 LTS) :

$ sudo apt-get install libqwt-qt5-6 libqwt-qt5-dev libqwt-headers libqwt-doc

Où sont situés les fichiers de documentation et les exemples ?

$ dpkg -S libqwt-doc | head -5
libqwt-doc: /usr/share/doc/libqwt-doc/html/class_qwt_plot_direct_painter.html
libqwt-doc: /usr/share/doc/libqwt-doc/html/class_qwt_dyn_grid_layout__inherit__graph.png
libqwt-doc: /usr/share/doc/libqwt-doc/html/class_qwt_compass__inherit__graph.map
libqwt-doc: /usr/share/doc/libqwt-doc/html/search/functions_17.html
libqwt-doc: /usr/share/doc/libqwt-doc/html/qwt__dial_8h_source.html

$ dpkg -S libqwt-doc | grep examples | head -5
libqwt-doc: /usr/share/doc/libqwt-doc/examples/radio/ampfrm.h
libqwt-doc: /usr/share/doc/libqwt-doc/examples/friedberg
libqwt-doc: /usr/share/doc/libqwt-doc/examples/realtime/randomplot.h
libqwt-doc: /usr/share/doc/libqwt-doc/examples/qwtconfig.pri
libqwt-doc: /usr/share/doc/libqwt-doc/examples/legends/mainwindow.cpp

Documentation PDF

Quelques widgets Qwt

QwtCompass

QwtCompass est un widget pour afficher les directions (de 0° à 359°). Il se compose d’une échelle graduée et on peut ajouter une aiguille (QwtDialSimpleNeedle, …) et une rose (des vents) (QwtCompassRose, …).

Lien : La classe QwtCompass

Instancier un objet QwtCompass :

QwtCompass *qwtDirection;

qwtDirection = new QwtCompass(this);

Paramétrer un objet QwtCompass :

// Largeur de l'ombre
qwtDirection->setLineWidth(10);
//qwtDirection->setLineWidth(0);
// Type d'ombre
qwtDirection->setFrameShadow(QwtCompass::Sunken);
//qwtDirection->setFrameShadow(QwtCompass::Raised);
//qwtDirection->setFrameShadow(QwtCompass::Plain);

// La ligne de graduation
//qwtDirection->setScaleComponents( QwtAbstractScaleDraw::Backbone );
// Les étiquettes de graduation
//qwtDirection->setScaleComponents( QwtAbstractScaleDraw::Labels );
// Les graduations
//qwtDirection->setScaleComponents( QwtAbstractScaleDraw::Ticks );
// Plusieurs
qwtDirection->setScaleComponents( QwtAbstractScaleDraw::Backbone | QwtAbstractScaleDraw::Ticks | QwtAbstractScaleDraw::Labels );

// Les étiquettes de graduation :
/*QMap<double, QString> map;
for ( double d = 0.0; d < 360.0; d += 60.0 )
{
    QString label;
    label.sprintf("%.0f", d);
    map.insert(d, label);
}
qwtDirection->setLabelMap(map);*/

// ou :
QMap<double, QString> map;
map.insert(0.0, "N");
map.insert(45.0, "NE");
map.insert(90.0, "E");
map.insert(135.0, "SE");
map.insert(180.0, "S");
map.insert(225.0, "SO");
map.insert(270.0, "O");
map.insert(315.0, "NO");
qwtDirection->setLabelMap(map);

// Échelle
qwtDirection->setScaleTicks(0, 0, 3);
qwtDirection->setScale(0, 0, 5.0);

// Aiguille
qwtDirection->setNeedle(new QwtCompassMagnetNeedle(QwtCompassMagnetNeedle::ThinStyle));

// Origine
qwtDirection->setOrigin(270.0); // au Nord

// Fixer une valeur
qwtDirection->setValue(0.0); // Donc le Nord

qwtDirection->setReadOnly(true); // pas d'interaction avec la souris

// Modification des couleurs
QPalette p1 = qwtDirection->palette();
p1.setColor(QPalette::Foreground, QColor(200, 200, 200));
p1.setColor(QPalette::Background, QColor(150, 150, 150));
p1.setColor(QPalette::Text, QColor(70, 70, 255)); // Texte et graduations
qwtDirection->setPalette(p1);

On obtient :

QwtThermo

QwtThermo est un widget pour afficher une valeur dans un thermomètre.

Lien : La classe QwtThermo

Instancier un objet QwtThermo :

QwtThermo *qwtThermometre;

qwtThermometre = new QwtThermo(this);

Paramétrer un objet QwtThermo :

QwtDial

QwtDial est conçu comme une classe de base pour les widgets de cadran comme les speedomètres, les boussoles, les horloges …

Lien : La classe QwtDial

Instancier un objet QwtDial :

QwtDial *qwtVitesse;

qwtVitesse = new QwtDial(this);

Paramétrer un objet QwtDial :

// L'origine
qwtVitesse->setOrigin(0);
// La ligne de graduation
qwtVitesse->setScaleComponents( QwtAbstractScaleDraw::Backbone | QwtAbstractScaleDraw::Ticks | QwtAbstractScaleDraw::Labels );
// Longueur de la graduation
qwtVitesse->setScaleTicks(0, 0, 5);
// Intervalle de graduation
qwtVitesse->setScale(0, 0, 50);
// Espacement entre l'étiquette et la graduation
qwtVitesse->scaleDraw()->setSpacing(5);

// Aiguille
QwtDialSimpleNeedle *needle = new QwtDialSimpleNeedle( QwtDialSimpleNeedle::Arrow, true, Qt::red, QColor(Qt::gray).light(130));
qwtVitesse->setNeedle(needle);

// Modification des couleurs
QPalette p2 = qwtVitesse->palette();
p2.setColor(QPalette::Foreground, QColor(200, 200, 200));
p2.setColor(QPalette::Background, QColor(150, 150, 150));
p2.setColor(QPalette::Text, QColor(70, 70, 255)); // Texte
qwtVitesse->setPalette(p2);

qwtVitesse->setReadOnly(true); // pas d'interaction avec la souris

// Fixer une valeur
qwtVitesse->setValue(55);

On obtient :

Ou par exemple en modifiant l’origine et l’arc du cadran :

qwtVitesse->setOrigin(135.0);
qwtVitesse->setScaleArc(0.0, 270.0);

On obtient alors :

Code source Qt4 : test-qwt-widgets.zip Code source Qt5 : test-qwt-qt5-6-widgets.zip

Les courbes

QwtPlot est un widget pour tracer des graphiques 2D. Les éléments de tracé peuvent être des courbes (QwtPlotCurve), des marqueurs (QwtPlotMarker), une grille (QwtPlotGrid) ou tout autre élément dérivé de QwtPlotItem. Un tracé peut avoir jusqu’à quatre axes, chaque élément de tracé étant attaché à un axe x et un axe y. Les échelles sur les axes peuvent être définies explicitement (QwtScaleDiv), ou calculées à partir des éléments du tracé, en utilisant des algorithmes (QwtScaleEngine) qui peuvent être configurés séparément pour chaque axe.

Lien : La classe QwtPlot

Instancier un objet QwtPlot :

QwtPlot *plot;

plot = new QwtPlot(this);

Paramétrer un objet QwtPlot :

// Un titre
plot->setTitle(QString::fromUtf8("Température"));

// une légende à droite
plot->insertLegend(new QwtLegend(), QwtPlot::RightLegend);

// cadrillage
QwtPlotGrid *grid = new QwtPlotGrid;
grid->setMajPen(QPen(Qt::black, 0, Qt::DotLine));
grid->attach(plot);

// configuration des axes
plot->setAxisTitle(plot1->xBottom, QString::fromUtf8("en s -->"));
plot->setAxisScale(QwtPlot::xBottom, 0.0, 20.0);
plot->setAxisTitle(plot1->yLeft, QString::fromUtf8("en °C -->"));
plot->setAxisScale(QwtPlot::yLeft, 0.0, 100.0);

QwtPlotCurve est un élément de tracé qui représente une série de points. Une courbe est la représentation d’une série de points dans le plan x-y. QwtPlotCurve prend en charge différents styles d’affichage, interpolation (cf. spline) et symboles.

Lien : La classe QwtPlotCurve

Instancier un objet QwtPlotCurve :

QwtPlotCurve *plot;

courbe = new QwtPlotCurve("Moteur");

Paramétrer un objet QwtPlotCurve :

// ajout à la légende
courbe->setLegendAttribute(QwtPlotCurve::LegendShowLine, true);
// tracé en bleu
courbe->setPen(QPen(Qt::blue));
// avec des points jaunes
courbe->setSymbol(new QwtSymbol(QwtSymbol::Ellipse, Qt::yellow, QPen(Qt::black), QSize(5, 5)));
// style de tracé
courbe->setStyle(QwtPlotCurve::Lines); // ligne
courbe->setCurveAttribute(QwtPlotCurve::Fitted); // courbe
courbe->setRenderHint(QwtPlotItem::RenderAntialiased);
// la courbe sur le plot
courbe->attach(plot);

Tracer des points avec un objet QwtPlotCurve : on utilise généralement la méthode setSamples soit

  • avec des tableaux de double
const int TAILLE = 20;
double _x[TAILLE] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
double _y[TAILLE]  = { 37.2, 37.6, 37.7, 37.5, 37.1, 39.0, 45.5, 45.9, 48.9, 46.2, 55.0, 49, 49, 48.5, 48.0, 55.0, 49, 49, 48.5, 48.0};

// on trace les points x,y
courbe->setSamples(_x, _y, TAILLE);
plot->replot();

// ...

// on efface le tracé
courbe->setSamples(_x, _y, 0);
plot->replot();
  • avec des QVector de double
QVector<double> _x;
QVector<double> _y;

_x.push_back(0);
_y.push_back(37.2);

_x.push_back(1);
_y.push_back(37.6);

// ...

// on trace les points x,y
courbe->setSamples(_x, _y);
plot->replot();

// ...

// on efface le tracé
_x.clear();
_y.clear();
courbe->setSamples(_x, _y);
plot->replot();

Remarque : il y a beaucoup d’autres possibilités avec Qwt mais il faut lire la documentation et consulter les exemples fournis !

Code source Qt4 : test-qwt-plot.zip Code source Qt5 : test-qwt-qt5-6-plot.zip

Voir aussi : www.qcustomplot.com

Code source : qcustomplot.zip

Retour au sommaire