2011-10-17 5 views
5

J'écris une application en C++ avec QT où vous avez n points et calculez la coque convexe de ceci. Cependant, une fois que cela est calculé, je n'ai aucune idée de comment tracer les points et dessiner la bordure de la coque. Faire des boutons de menu et autres est assez simple, mais je ne suis pas sûr de connaître les outils pour le faire.Comment tracez-vous des points dans QT?

Comment faites-vous ça?

+0

Possible duplicate de: Faire un tracé dans Qt (http://stackoverflow.com/questions/1491362/making-plot-in-qt) – yasouser

Répondre

4

Vous pouvez simplement créer une classe personnalisée dérivée de QWidget où vous remplacez la méthode void paintEvent(QPaintEvent* event). En ce que vous mettez les points dans une sorte de liste de points, soit std::vector<QPoint> ou QList<QPoint>, puis peignez-le avec une méthode Polyline. Par exemple:

void Foo::paintEvent(QPaintEvent* event) 
{ 
    QPainter painter(this); 
    std::vector<QPoint> points; 
    // Fill points with the points 
    painter.drawPolyLine(points.data(), static_cast<int>(points.size())); 
} 
+0

J'ai essayé, mais j'ai eu une erreur de compilation: 'QPainter painter' a un initialiseur mais un type incomplet ' –

2

Il existe une bibliothèque de graphiques, qwt, qui fournit des widgets Qt à des fins de - cartographie.

+0

En effet, je l'ai remarqué, mais j'espère le faire avec seulement QT , à des fins de compatibilité avec certains pairs. –

+2

Vous pouvez compiler qwt directement dans votre projet, et il est basé sur Qt. Je ne vois pas comment cela affecterait la compatibilité. – Chris

10

QGraphicsView 2D-t tracé très bien et vous donne beaucoup d'options sur la façon de l'afficher. Il n'est pas aussi adapté pour tracer des données scientifiques que qwt, mais juste pour montrer un tas de points, ou de la géométrie ou des animations et beaucoup d'autres choses cela fonctionne très bien. Voir la documentation et les exemples de Qt's Graphics View Framework.

Voici comment tracer un tas de points dans un QGraphicsScene et le montrer dans un QGraphicsView.

#include <QtGui/QApplication> 

#include <QGraphicsView> 
#include <QGraphicsScene> 
#include <QPointF> 
#include <QVector> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QVector <QPointF> points; 

    // Fill in points with n number of points 
    for(int i = 0; i< 100; i++) 
     points.append(QPointF(i*5, i*5)); 

    // Create a view, put a scene in it and add tiny circles 
    // in the scene 
    QGraphicsView * view = new QGraphicsView(); 
    QGraphicsScene * scene = new QGraphicsScene(); 
    view->setScene(scene); 

    for(int i = 0; i< points.size(); i++) 
     scene->addEllipse(points[i].x(), points[i].y(), 1, 1); 

    // Show the view 
    view->show(); 

    // or add the view to the layout inside another widget 

    return a.exec(); 
} 

Note: Vous voudrez probablement appeler setSceneRect sur votre point de vue, sinon la scène sera juste centre auto il. Lisez les descriptions pour QGraphicsScene et QGraphicsView dans la documentation Qt. Vous pouvez redimensionner la vue pour montrer plus ou moins de la scène et il peut mettre des barres de défilement. J'ai répondu à un question connexe où je montre plus sur ce que vous pouvez faire avec un QGraphicsView que vous pouvez vouloir regarder aussi.

Questions connexes