2011-10-17 16 views
5

मैं क्यूटी के साथ सी ++ में एक एप्लीकेशन लिख रहा हूं जहां आपके पास एन अंक हैं और इस के उत्तल खंड की गणना करें। हालांकि, एक बार यह गणना की जाने के बाद मुझे नहीं पता कि अंक कैसे प्लॉट करें और पतवार की सीमा खींचें। मेनू बटन बनाना और ऐसा आसान है, लेकिन मुझे यकीन नहीं है कि मैं ऐसा करने के लिए टूल जानता हूं।आप क्यूटी में अंक कैसे प्लॉट करते हैं?

आप यह कैसे करते हैं?

+0

संभावित डुप्लिकेट: क्यूटी में साजिश बनाना (http://stackoverflow.com/questions/1491362/making-plot-in-qt) – yasouser

उत्तर

4

आप QWidget से प्राप्त एक कस्टम क्लास बना सकते हैं जहां आप void paintEvent(QPaintEvent* event) विधि को ओवरराइड करते हैं। उसमें आप अंक को किसी प्रकार की पॉइंट सूची में डाल दें, या तो std::vector<QPoint> या QList<QPoint> और फिर इसे पॉलीलाइन विधि से पेंट करें। उदाहरण के लिए:

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

मैंने कोशिश की, लेकिन संकलन त्रुटि मिली: 'क्यूपेन्टर पेंटर' में प्रारंभकर्ता है लेकिन अपूर्ण प्रकार ' –

2

एक चार्टिंग लाइब्रेरी है, qwt, जो कि erm-charting उद्देश्यों के लिए क्यूटी विजेट प्रदान करता है।

+0

दरअसल, मैंने यह देखा, लेकिन मैं इसे केवल क्यूटी के साथ करने की उम्मीद कर रहा हूं , कुछ साथियों के साथ संगतता उद्देश्यों के लिए। –

+2

आप अपने प्रोजेक्ट में qwt को संकलित कर सकते हैं, और यह क्यूटी आधारित है। मैं नहीं देखता कि यह संगतता को कैसे प्रभावित करेगा। – Chris

10

QGraphicsView बहुत अच्छी तरह से साजिश रचने 2 डी करता है और आप इसे कैसे प्रदर्शित करने के लिए के लिए कई विकल्प देता है। यह qwt जितना वैज्ञानिक डेटा प्लॉट करने के लिए तैयार नहीं है, बल्कि केवल अंक, या ज्यामिति या एनिमेशन का एक समूह दिखाने के लिए और अन्य कई चीजें यह बहुत अच्छी तरह से काम करता है। क्यूटी के Graphics View Framework दस्तावेज और उदाहरण देखें।

यहां बताया गया है कि आप QGraphicsScene में बिंदुओं का एक समूह कैसे प्लॉट करते हैं और इसे 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(); 
} 

ध्यान दें: आप शायद अपने दृश्य पर setSceneRect कॉल करने के लिए, नहीं तो दृश्य सिर्फ ऑटो केंद्र होगा यह चाहते है। क्यूटी दस्तावेज़ीकरण में QGraphicsScene और QGraphicsView के लिए विवरण पढ़ें। आप दृश्य को कम या कम दिखाने के लिए दृश्य को स्केल कर सकते हैं और इसमें स्क्रॉल बार डाल सकते हैं। मैंने एक संबंधित question का उत्तर दिया जहां मैं QGraphicsView के साथ क्या कर सकता हूं, इसके बारे में अधिक दिखाता हूं, जिसे आप देखना भी चाह सकते हैं।

संबंधित मुद्दे