Qt 차 트 예제

Qt 5.7 에 변화 가 있 습 니 다. 원래 상업 판 의 몇 가지 모듈 을 GPLv 3 프로 토 콜 로 지역 사회 버 전에 넣 었 습 니 다.
  • Qt Charts (GPLv3)
  • Qt Data Visualization (GPLv3)
  • Qt Virtual Keyboard (GPLv3)
  • Qt Purchasing (LGPLv3)
  • Qt Quick 2D renderer (GPLv3)

  • 이 모듈 들 은 모두 매우 훌륭 하 다!
    Qt 5.7 의 일부 소식, 구체 적 으로 참조:
  • http://blog.qt.io/blog/2016/06/16/qt-5-7-released/
  • https://wiki.qt.io/New_Features_in_Qt_5.7

  • 이전에 포럼 에서 많은 사람들 이 Qt 에서 사용 할 수 있 는 도표 라 이브 러 리 를 찾 고 있 었 는데, 지금 은 좋아 졌 고, 공식 적 으로 는 있다.그리고 Qt Quick 2D renderer 는 OpenGL 이 지원 하지 않 는 장치 에서 Qt Quick 을 사용 하 는 것 을 지원 합 니 다. 일부 내장 장치 에 있어 서 는 복음 입 니 다.
    오 랜 만 에 Qt 를 만 들 었 더 니 버 전이 빨리 업데이트 되 었 습 니 다. 제 가 'Qt Quick 핵심 프로 그래 밍' 과 'Qt on Android 핵심 프로 그래 밍' 을 썼 을 때 버 전 은 5.3 이 었 는데 지금 5.8 알파 가 다 나 왔 습 니 다. 저 는 이미 Out 입 니 다.
    지금 가끔 시간 이 나 서 Qt Charts 를 써 보 았 습 니 다. 간단 하고 쓰기 좋 습 니 다. 할 말 이 없습니다.
    예시 효과
    이전 데모 효과 그림:
    기본 용법
    Qt Charts 는 모듈 로 Qt SDK 에 따라 발 표 됩 니 다. 사용 하려 면 먼저 pro 파일 에 다음 문 구 를 추가 해 야 합 니 다.
    QT += charts

    그리고 코드 에 다음 문장 을 추가 합 니 다.
    #include <QtCharts>
    using namespace QtCharts;

    다음은 Qt Charts 모듈 의 각종 라 이브 러 리 를 사용 할 수 있 습 니 다.비교적 흔히 볼 수 있 는 라 이브 러 리 를 소개 합 니 다.
    >> QChart
    가장 중요 한 종 류 는 각종 Charts 를 표시 하 는 데 쓰 인 다.QGraphics Widget 의 파생 클래스 이기 때문에 QGraphics View 에 표시 할 수 있 습 니 다.내 가 제공 한 간단 한 예 는 6 개의 QChart 를 같은 QGraphics Scene 에 놓 고 보 여 주 는 것 이다.
    QChart 를 3 단계 로 나 누 기:
  • new QChart ()
  • 와 같은 인 스 턴 스 를 구성 합 니 다.
  • addSeries () 를 호출 하여 도표 데 이 터 를 추가 하고 addAxis, setAxis X 또는 setAxis 로 좌표 축 을 설정 하 며 다른 배경, 그림 을 설정 하 는 방법
  • 을 호출 합 니 다.
  • QChartView 또는 QGraphicsScene + QGraphicsView 를 사용 하여 QChart 표시
  • >> QChartView
    QGraphicsView 에서 계승 되 어 QChart 를 표시 하 는 데 사용 되 며, 창 크기 가 변 할 때 자동 으로 QChart 크기 를 조정 합 니 다.
    QChartView 를 독립 적 으로 사용 할 수도 있 고 다른 UI 인터페이스 에 끼 워 넣 을 수도 있 습 니 다.가장 간단 한 용법 은:
    auto chart = new QChart();
    // ...configure chart
    QChartView view(lineChart);
    view.show();

    QGraphicsView + QGraphicsScene 과 같은 조합 을 사용 하고 싶다 면 코드 는 다음 과 같 습 니 다.
    auto chart = new QChart();
    // ...configure chart
    QGraphicsScene scene(0, 0, 500, 400);
    scene.addItem(chart);
    QGraphicsView view(&scene);
    view.show();

    QGraphicsView 를 사용 하여 QChart 를 직접 표시 할 때 QChart 의 크기 는 창 크기 에 따라 자동 으로 변 하지 않 습 니 다. 필요 하 다 면 스스로 설정 할 수 있 습 니 다.
    > > 각종 시리즈 및 세트 set
    Qt Charts 는 QAbstract Series 로 각종 도표 데 이 터 를 표시 하 는데 다양한 파생 류 가 있다.
    QAbstractBarSeries 는 추상 적 인 클래스 로 막대 그래프 데 이 터 를 정의 합 니 다.그것 에서 파생 된 실례 화 할 수 있 는 대표 주 상도 데이터 의 종 류 는 다음 과 같다.
  • QBarSeries
  • QHorizontalBarSeries
  • QHorizontalPercentBarSeries
  • QHorizontalStackedBarSeries
  • QPercentBarSeries
  • QStackedBarSeries

  • 내 예제 에 서 는 QBarSeries 와 QPercent BarSeries 의 용법 을 보 여 주 었 다.다른 종 류 는 Qt 문 서 를 보면 사용법 을 빠르게 알 수 있 습 니 다.
    Qarea Series 는 블록 맵 데 이 터 를 정의 합 니 다. 바로 우리 예제 효과 중 왼쪽 아래 에 있 는 도표 와 같 습 니 다.
    QBox Plot Series 정의 박스 라인 맵 (금융 류 소프트웨어 상용).
    QPieSeries 는 떡 그림 데 이 터 를 정의 합 니 다.
    QXYSeries 는 QLine Series, QScatter Series 와 같은 기본 클래스 입 니 다.나의 예 는 QLine Series (접 는 선 그림) 의 용법 을 보 여 주 었 다.
    코드
    Show me the code !
    #include <QApplication>
    #include <QtCharts>
    using namespace QtCharts;
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        // use QGraphicsScene + QGraphicsView instead of QChartView
        QGraphicsScene scene(0, 0, 960, 560);
        QGraphicsView view(&scene);
        view.setRenderHint(QPainter::Antialiasing);
        view.setMinimumSize(1000, 600);
        view.setSceneRect(0, 0, 960, 560);
    
        // Line Chart
        auto lineChart = new QChart();
        lineChart->setTitle("Simple Line Chart");
        lineChart->legend()->setVisible(false);
        auto lines = new QLineSeries();
        lines->append(5, 5);
        lines->append(10, 38);
        lines->append(35, 60);
        lines->append(50, 20);
        lines->append(80, 90);
        lines->append(100, 70);
        lineChart->addSeries(lines);
    
        lineChart->setGeometry(10, 4, 300, 260); // the method of QGraphicsWidget, move && resize
        lineChart->createDefaultAxes();
        lineChart->setBackgroundVisible(true);
        lineChart->setBackgroundPen(QPen(Qt::lightGray)); // the frame
        lineChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));
        scene.addItem(lineChart);
    
        // Bar Charts
        auto barChart = new QChart();
        barChart->setTitle("Simple Bar Charts");
        barChart->setAnimationOptions(QChart::SeriesAnimations);
        auto bars = new QBarSeries();
    
        //QBarSet, value sets, from 0 ~ N, 0 <--> categories 0
        auto setJan = new QBarSet("Jan");
        setJan->setBrush(QBrush(Qt::darkRed));
        *setJan << 20 << 120 << 60 << 40;
        bars->append(setJan);
        auto setFeb = new QBarSet("Feb");
        setFeb->setBrush(QBrush(Qt::darkBlue));
        bars->append(setFeb);
        setFeb->append(50);
        setFeb->append(160);
        setFeb->append(80);
        setFeb->append(100);
        auto setMar = new QBarSet("Mar");
        bars->append(setMar);
        *setMar << 40 << 140 << 120 << 100;
    
        barChart->setGeometry(320, 4, 300, 260);
        barChart->setBackgroundPen(QPen(Qt::lightGray)); 
        barChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));
        barChart->addSeries(bars);
    
        QStringList categories;
        categories << "Jan" << "Feb" << "Mar" << "Apr";
        auto axisX = new QBarCategoryAxis();
        axisX->append(categories);
        barChart->createDefaultAxes();
        barChart->setAxisX(axisX, bars);
    
        barChart->legend()->setVisible(true);
        barChart->legend()->setAlignment(Qt::AlignBottom);
    
        scene.addItem(barChart);
    
        // Pie Charts
        auto pieChart = new QChart();
        pieChart->setTitle("Simple Pie Charts");
        auto pies = new QPieSeries();
        pies->append("Qt", 60);
        pies->append("MFC", 25);
        pies->append("FLTK", 10);
        auto gtkSlice = new QPieSlice("GTK", 5);
        pies->append(gtkSlice);
        pieChart->addSeries(pies);
        pieChart->setGeometry(630, 4, 300, 260);
        pieChart->setBackgroundPen(QPen(Qt::lightGray)); 
        pieChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));
        pieChart->legend()->setVisible(true);
        pieChart->legend()->setAlignment(Qt::AlignBottom);
    
        scene.addItem(pieChart);
    
        // Area Charts
        auto upperBounds = new QLineSeries();
        *upperBounds << QPointF(20, 20) << QPointF(40, 80) << QPointF(80, 60);
        auto lowerBounds = new QLineSeries();
        *lowerBounds << QPointF(30, 5) << QPointF(45, 30) << QPointF(70, 10);
        auto area = new QAreaSeries(upperBounds, lowerBounds);
        auto areaChart = new QChart();
        areaChart->legend()->setVisible(false);
        areaChart->setTitle("Simple Area Chart");
        areaChart->addSeries(area);
        areaChart->setGeometry(10, 280, 300, 260);
        areaChart->setBackgroundPen(QPen(Qt::lightGray)); 
        areaChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));
        areaChart->createDefaultAxes();
    
        scene.addItem(areaChart);
    
        // BoxPlot Charts
        auto boxplots = new QBoxPlotSeries();
        auto boxset1 = new QBoxSet(5, 20, 60, 80, 120);
        auto boxset2 = new QBoxSet();
        *boxset2 << 20 << 40 << 80 << 100 << 110;
        auto boxset3 = new QBoxSet();
        QList<qreal> vals = {0 ,60 ,76 ,120 ,150};
        boxset3->append(vals);
        boxplots->append(boxset1);
        boxplots->append(boxset2);
        boxplots->append(boxset3);
        auto boxChart = new QChart();
        boxChart->legend()->setVisible(false);
        boxChart->setTitle("Box and Whiskers");
        boxChart->addSeries(boxplots);
        boxChart->setGeometry(320, 280, 300, 260);
        boxChart->setBackgroundPen(QPen(Qt::lightGray)); 
        boxChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));
        boxChart->createDefaultAxes();
        scene.addItem(boxChart);
    
        // PercentBar Charts
        auto pbarChart = new QChart();
        pbarChart->setTitle("Percent Bar Charts");
        pbarChart->setAnimationOptions(QChart::SeriesAnimations);
        auto pbars = new QPercentBarSeries();
    
        //QBarSet, value sets, from 0 ~ N, 0 <--> categories 0
        auto set1 = new QBarSet("Jan");
        set1->setBrush(QBrush(Qt::darkRed));
        *set1 << 20 << 120 << 60 << 40;
        pbars->append(set1);
        auto set2 = new QBarSet("Feb");
        set2->setBrush(QBrush(Qt::darkBlue));
        pbars->append(set2);
        set2->append(50);
        set2->append(160);
        set2->append(80);
        set2->append(100);
        auto set3 = new QBarSet("Mar");
        pbars->append(set3);
        *set3 << 40 << 140 << 120 << 100;
    
        pbarChart->setGeometry(630, 280, 300, 260);
        pbarChart->setBackgroundPen(QPen(Qt::lightGray)); 
        pbarChart->setBackgroundBrush(QBrush(QColor(240, 240, 240)));
        pbarChart->addSeries(pbars);
    
        QStringList pcategories;
        pcategories << "Jan" << "Feb" << "Mar" << "Apr";
        auto paxisX = new QBarCategoryAxis();
        paxisX->append(pcategories);
        pbarChart->createDefaultAxes();
        pbarChart->setAxisX(paxisX, pbars);
    
        pbarChart->legend()->setVisible(true);
        pbarChart->legend()->setAlignment(Qt::AlignBottom);
    
        scene.addItem(pbarChart);
    
        view.show();
    
        return a.exec();
    }

    코드 를 main () 방법 에 넣 었 습 니 다. 좀 길 어 보이 지만 구체 적 인 Chart 를 보 여 주 는 코드 는 길지 않 습 니 다.
    일부 API 의 용법 은 Qt 도움말 을 참고 하여 더 이상 군말 하지 않 습 니 다.

    좋은 웹페이지 즐겨찾기