Qchart的图形显示依附于QChartView,创建一个QChartView继承类,通过窗口部件的提升进行图表的显示
一、简单认识QLineSeries
QLineSeries属于折线类,它继承于QXYSeries类,可以使用QXYSeries类所有方法,对折线进行属性设置
二、创建折线
qsrand(QTime::currentTime().second());
//创建折线数据
for(int i = 0 ; i < 40;i++)
{
int value = (qrand() % 100);
m_line->append(i, value);
}
//x轴显示范围
m_X->setRange(0,20);
//y轴显示范围
m_Y->setRange(0,100);
//添加坐标
this->chart()->addAxis(m_X,Qt::AlignBottom);
this->chart()->addAxis(m_Y,Qt::AlignLeft);
//隐藏图例
//this->chart()->legend()->hide();
this->chart()->addSeries(m_line);
三、设置抗锯齿
setRenderHint(QPainter::Antialiasing);
四、设置缩放功能
//设置橡皮筋 用来图形缩放功能,右击缩放,左击拖拽放大(坐标系不会发生变化),如果需要坐标系同步变化需要对鼠标事件重写(待测试)
setRubberBand(QChartView::VerticalRubberBand);
五、图例的简单设置
1、采用setAlignment函数设置图例的显示位置(只能在坐标系的四周显示)
this->chart()->legend()->setAlignment(Qt::AlignRight);
2、自定义图例的显示位置,需要先进行图例与图像的分离设置
this->chart()->legend()->detachFromChart();
3、更换图例的图标显示
//MarkerShapeRectangle、MarkerShapeFromSeries、、MarkerShapeCircle
this->chart()->legend()->setMarkerShape(QLegend::MarkerShapeCircle)
六、自定义图例的图标样式
//修改图例内容的大小
QFont font = this->chart()->legend()->font();
font.setPointSizeF(22);
this->chart()->legend()->setFont(font);
// 图片大小应和上面定义的图标大小一致或小于(画布)
QImage star(30, 30, QImage::Format_ARGB32);
star.fill(Qt::transparent);
// 加载图片
QPixmap image = QPixmap(":/tmp/state.png");
QPainter painter(&star);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QRgb(0xf6a625));
painter.setBrush(painter.pen().color());
painter.drawPixmap(0,0,18,18,image);
//标签字体颜色
this->chart()->legend()->markers().at(0)->setLabelBrush(QBrush(QColor(Qt::red)));
//图标背景填充
this->chart()->legend()->markers().at(0)->setBrush(QBrush(star));
//原有的图标边框设置为透明色
this->chart()->legend()->markers().at(0)->setPen(QPen(Qt::transparent));
//设置图例的位置与大小
this->chart()->legend()->setGeometry(600,50,150,30);
this->chart()->legend()->update();
//如果想更好的优化图例,可以自定义一个图框用来实现图例的效果
效果: