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
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();
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