2011-10-17 16 views
5

Sto scrivendo un'applicazione in C++ con QT dove hai n punti e calcola lo scafo convesso di questo. Tuttavia, una volta calcolato, non ho idea di come tracciare i punti e tracciare il bordo dello scafo. Creare pulsanti di menu e così è abbastanza semplice, ma non sono sicuro di conoscere gli strumenti per farlo.Come si tracciano i punti in QT?

Come si fa?

+0

Possibile duplicato di: tracciare la trama in Qt (http://stackoverflow.com/questions/1491362/making-plot-in-qt) – yasouser

risposta

4

È possibile semplicemente creare una classe personalizzata derivata da QWidget in cui si esegue l'override del metodo void paintEvent(QPaintEvent* event). In questo modo si inseriscono i punti in una sorta di elenco punti, std::vector<QPoint> o QList<QPoint> e quindi si dipinge con un metodo Polilinea. Per esempio:

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

ho provato questo, ma ho ottenuto errore di compilazione: 'QPainter pittore' ha inizializzatore ma tipo incompleto ' –

2

C'è una libreria di grafici, qwt, che fornisce i widget Qt per - erm - scopi di creazione di grafici.

+0

In effetti, ho notato questo, ma spero di farlo solo con QT , per motivi di compatibilità con alcuni colleghi. –

+2

Puoi compilare qwt direttamente nel tuo progetto, ed è basato su Qt. Non vedo come questo potrebbe influenzare la compatibilità. – Chris

10

QGraphicsView fa 2D tramando molto bene e ti dà molte opzioni per il modo per visualizzarlo. Non è su misura per tracciare dati scientifici fino al qwt, ma solo per mostrare un mucchio di punti, o geometrie o animazioni e molte altre cose funziona molto bene. Vedi la documentazione e gli esempi di Qt's Graphics View Framework.

Ecco come si traccia un gruppo di punti in un QGraphicsScene e lo si visualizza in 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(); 
} 

Nota: probabilmente vorrà chiamare setSceneRect sulla vostra vista, altrimenti la scena sarà solo l'auto-centro di esso. Leggi le descrizioni di QGraphicsScene e QGraphicsView nella documentazione Qt. È possibile ridimensionare la vista per mostrare più o meno della scena e può inserire barre di scorrimento. Ho risposto a uno question correlato dove mostro di più su cosa si può fare con uno QGraphicsView che si potrebbe voler vedere anche.

Problemi correlati