Qt 차 트 예제
18768 단어 qt도표QChartQt-5-7QChartView
이 모듈 들 은 모두 매우 훌륭 하 다!
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 단계 로 나 누 기:
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 와 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 도움말 을 참고 하여 더 이상 군말 하지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt How to use connect between incompatible signal and slotIn this I want to call a function, that function will receive a point . But this function should be invoked by a timer's...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.