IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Les bibliothèques complémentaires > Qwt
        Qu'est ce que Qwt ?
        Quels types de composants puis je créer avec Qwt ?
        Est il difficile d'utiliser Qwt ?
        Comment installer Qwt ?
        Comment insérer un composant Qwt dans mon application Qt ?
        Comment créer un repère dans mon interface ?
        Comment changer la couleur de fond de mon repère ?
        Comment ajouter une courbe sur mon repère ?
        Comment changer la couleur de ma courbe ?
        Comment ajouter une grille à mon repère ?
        Comment ajouter des grilles seulement horizontales/verticales ?
        Comment spécifier des valeurs à mes axes ?
        Comment ajouter un outil de zoom sur mon repère ?



Qu'est ce que Qwt ?
auteur : gulish
Qwt (Qt Widgets for Technical applications) est une librairie annexe à Qt, qui utilise cette dernière, et qui simplifie la création de widgets de mesure (Courbes, Graphiques, Jauges, Cadrans, ...). Cette librairie, ainsi que toutes les informations la concernant, sont disponibles sur la page web du projet : La librairie Qwt.

lien : en Qwt

Quels types de composants puis je créer avec Qwt ?
auteur : gulish
Quelques images des exemples Qwt sont disponibles dans le chapitre "Screenshots" de la page web de la librairie. Elles sont assez représentatives du type de composants pouvant être crées, même si une personnalisation est toujours possible.

lien : en Qwt

Est il difficile d'utiliser Qwt ?
auteur : gulish
Les classes Qwt sont basées sur celles de Qt, et leur utilisation est relativement simple. De plus, les classes disponibles sont assez complètes, et permettent facilement de créer l'objet que l'on désire. Cependant, cette librairie est moins intuitive que Qt, et la documentation la concernant est plutôt succincte. Il est nécessaire de connaître les bases de l'utilisation de Qt pour utiliser Qwt.


Comment installer Qwt ?
auteur : gulish
Qwt est basé sur Qt, et il faut donc préalablement avoir installé la librairie Qt. Il suffit ensuite de décompresser l'archive Qwt, modifier le fichier .pri (similaire au fichier .pro) selon vos besoins, puis d'exécuter qmake, puis make ou équivalents (nmake, cmake ...).


Comment insérer un composant Qwt dans mon application Qt ?
auteur : gulish
Les repères des courbes (QwtPlot) et les éléments de type "jauges" (QwtCompass, QwtDial, QwtKnob, ...) héritent tous de la classe QWidget. Il est donc facile de les ajouter, comme tout autre widget, dans le layout de votre application.


Comment créer un repère dans mon interface ?
auteur : gulish
La classe principale pour la gestion des repères est QwtPlot. Son utilisation est très simple. Par défaut, seule la partie positive des axes x et y apparaît, mais cela est modifiable.

#include <QApplication>
#include <qwt_plot.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QwtPlot myPlot;
    myPlot.show();
    return app.exec();
}

Comment changer la couleur de fond de mon repère ?
auteur : gulish
On utilise la méthode setCanvasBackground(const QColor &c) :

#include <QApplication>
#include <qwt_plot.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QwtPlot myPlot;
    myPlot.setCanvasBackground(Qt::white);
    myPlot.show();
    return app.exec();
}

Comment ajouter une courbe sur mon repère ?
auteur : gulish
Les courbes se créent grâce à la classe QwtPlotCurve. Cette classe permet une grande personnalisation de l'affichage (symboles des points, couleur, traçage ou non de ligne, etc.). Une courbe étant une suite de points, il faut renseigner une suite de points à QwtPlotCurve. Pour cela, on utilise la méthode setData(...) qui peut accepter différents arguments. La plus triviale est setData (const double *xData, const double *yData, int size), ou xData représente un tableau de double, contenant toutes les abscisses des points de notre courbe, yData contient lui les ordonnées. Ainsi, notre premier point aura comme coordonnées [ xData[0],yData[0] ]. Le troisième paramètre, size, renseigne sur le nombre de points à afficher, en partant de zéro. Bien sûr, xData et yData doivent au moins contenir "size" éléments.

#include <QApplication>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QwtPlot myPlot;
    QwtPlotCurve myCurve;
    
    //indique à myPlot qu'il doit afficher myCurve
    myCurve.attach(&myPlot);
    
    //QVector peut être facilement manipulé, et peut être convertit en double[];
    QVector<double> x(5);
    QVector<double> y(5);
    //On entre des valeurs
    for(int i=0;i<5;i++)
    {
        x.append((double)i);
        y.append((double)(5-i));
    }
    myCurve.setData(x.data(),y.data(),x.size());
    
    //Il faut rafraîchir l'affichage grâce à la méthode replot(), quand les données ont changé.
    myPlot.replot();
    myPlot.show();
    return app.exec();
}
Vous remarquerez que les axes se sont automatiquement ajustés aux données.


Comment changer la couleur de ma courbe ?
auteur : gulish
Il faut utiliser la méthode QwtPlotCurve::setPen().

#include <QApplication>

#include <qwt_plot.h>
#include <qwt_plot_curve.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QwtPlot myPlot;
    QwtPlotCurve myCurve;
    //indique à myPlot qu'il doit afficher myCurve
    myCurve.attach(&myPlot);
    
    //QVector peut être facilement manipulé, et peut être convertit en double[];
    QVector<double> x(5);
    QVector<double> y(5);
    //On entre des valeurs
    for(int i=0;i<5;i++)
    {
        x.append((double)i);
        y.append((double)(5-i));
    }
    myCurve.setData(x.data(),y.data(),x.size());
    //courbe en rouge
    myCurve.setPen(QPen(Qt::red));
    //Il faut rafraîchir l'affichage grâce à la méthode replot(), quand les données ont changé.
    myPlot.replot();
    myPlot.show();
    return app.exec();
}

Comment ajouter une grille à mon repère ?
auteur : gulish
Il est inutile d'ajouter une multitude de courbes pour faire apparaître une grille sur notre repère. QwtPlotGrid permet d'ajouter facilement une grille à notre repère. De plus, cette grille s'adapte automatiquement aux nouvelles échelles, et peut être personnalisée.

#include <QApplication>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QwtPlot myPlot;
    QwtPlotCurve myCurve;
    QwtPlotGrid myGrid;
    //indique à myPlot qu'il doit afficher myCurve
    myCurve.attach(&myPlot);
    
    //QVector peut être facilement manipulé, et peut être convertit en double[];
    QVector<double> x(5);
    QVector<double> y(5);
    
    //On entre des valeurs
    for(int i=0;i<5;i++)
    {
        x.append((double)i);
        y.append((double)(5-i));
    }
     
    myCurve.setData(x.data(),y.data(),x.size());
    
    //indique à myPlot qu'il doit afficher myGrid
    myGrid.attach(&myPlot);
    
    //Il faut rafraîchir l'affichage grâce à la méthode replot(), quand les données ont changé.
    myPlot.replot();
    myPlot.show();
    return app.exec();
}

Comment ajouter des grilles seulement horizontales/verticales ?
auteur : gulish
On peut facilement réaliser ce type de grille grâce aux méthodes QwtPlotGrid::enableX() et QwtPlotGrid::enableY().

#include <QApplication>
#include <QHBoxLayout>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    QWidget myWidget;
     
    QwtPlot myLeftPlot;
    QwtPlotGrid myLeftGrid;
    myLeftGrid.enableX(false);//On affiche seulement les lignes horizontales
    myLeftGrid.attach(&myLeftPlot);
     
    QwtPlot myRightPlot;
    QwtPlotGrid myRightGrid;
    myRightGrid.enableY(false);//On affiche seulement les lignes verticales
    myRightGrid.attach(&myRightPlot);
     
    QHBoxLayout myLayout(&myWidget);
    myWidget.setLayout(&myLayout);
    myLayout.addWidget(&myLeftPlot);
    myLayout.addWidget(&myRightPlot);
     
    myLeftPlot.replot();
    myRightPlot.replot();
    myWidget.show();
    return app.exec();
}

Comment spécifier des valeurs à mes axes ?
auteur : gulish
Les axes peuvent simplement se personnaliser grâce aux fonctions setAxisScale(axe,min,max,step) et setAxisTitle(axe,titre). Dans la majorité des cas, la grille s'ajuste automatique sur l'échelle du repère.

#include <QApplication>

#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
 
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
     
    QwtPlot myPlot;
    QwtPlotGrid myGrid;
    myGrid.attach(&myPlot);
    
    //l'axe x ira de -15 à +35, en affichant les valeurs de 5 en 5
    myPlot.setAxisScale(QwtPlot::xBottom,-15.0,35.0,5.0);
    myPlot.setAxisScale(QwtPlot::yLeft,-70.0,-35.0,5.0);
    
    myPlot.setAxisTitle(QwtPlot::xBottom,QString("My x values"));
    //On peut bien sûr utiliser les mêmes propriétés que QString
    myPlot.setAxisTitle(QwtPlot::yLeft,QString("<u>My y values</u>"));
     
    myPlot.replot();
    myPlot.show();
     
    return app.exec();
}

Comment ajouter un outil de zoom sur mon repère ?
auteur : gulish
Il existe une classe dédiée au zoom nommée QwtPlotZoomer. Elle permet de créer très simplement un outil de zoom, et d'autres fonctionnalités. On peut zoomer successivement sur une zone. Le zoom s'effectue en faisant un cliquer-glisser sur une zone du repère, le clic sur la molette permet de revenir au zoom précédent, et le clic droit permet de revenir au repère initial. La grille et les axes s'ajustent avec le zoom.

#include <QApplication>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_zoomer.h>
int main(int argc, char** argv)
{
    QApplication app(argc,argv);
     
    QwtPlot myPlot;
    QwtPlotGrid myGrid;
    myGrid.attach(&myPlot);
    QwtPlotZoomer myZoomer(myPlot.canvas());
     
    myPlot.replot();
    myPlot.show();
      
    return app.exec();
}


Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.