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 :
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 :
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
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 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 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
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
doubleconst 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();QVector de doubleQVector<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