文章首发自公众号:: nullobject 。
我的站点: https://www.nullobject.cn
这篇文章主要讲解QAbstractAxis类的API及其使用
在学习QAbstractAxis
类以前,须要先熟悉QtCharts中轴的组成元素都有哪些:c++
QtCharts中,一个坐标轴的内容大体包含如下几种:轴标题(title)、轴刻度标签(labels)、轴线(lines)、网格线(grid lines)、和轴阴影(shades)。经过QAbstractAxis
能够分别对以上几种元素进行单独控制。学习
QAbstractAxis
能够设置坐标轴标题的显示/隐藏、颜色、内容和字体等几个属性。字体
例如,设置坐标轴标题内容为axisTitle,颜色为蓝色,字体15号加粗,并显示出来:spa
// 显示标题 axisXLeft->setTitleVisible(true); // 设置标题内容 axisXLeft->setTitleText(QStringLiteral("I am axis's title")); // 设置颜色 axisXLeft->setTitleBrush(QBrush(Qt::blue)); // 设置字体12号加粗 QFont font = axisXLeft->titleFont(); font.setPointSize(15); font.setBold(true); axisXLeft->setTitleFont(font);
结果:code
bool isTitleVisible() const; void setTitleVisible(bool visible = true);
坐标轴标题默认状况下是显示的。对象
修改该属性时会触发
titleVisibleChanged(bool visible)
信号。
QString titleText() const; void setTitleText(const QString &title);
默认状况下,QAbstractAxis
不会设置任何标题内容。用户能够根据须要修改坐标轴标题。rem
标题发生改变时会触发
titleTextChanged(const QString &text)
信号。
QFont titleFont() const; void setTitleFont(const QFont &font);
该属性经过QFont
来设置标题的字体风格。get
该属性发生改变时,会触发
titleFontChanged(const QFont &font)
信号。
QBrush titleBrush() const; void setTitleBrush(const QBrush &brush);
注意目前只支持经过画刷来设置颜色,不支持设置画刷得其余效果(如画刷风格BrushStyle等)。it
该属性发生改变会触发
titleBrushChanged(const QBrush &brush)
信号。
QAbstractAxis
除了能够设置坐标轴刻度标签的显示/隐藏、颜色、和字体几个属性外,还可设置刻度标签的倾斜角度。class
例如,设置轴刻度标签显示,倾斜-45度,红色,加粗9号字体:
// 显示刻度标签 axisXLeft->setLabelsVisible(true); // 倾斜45度 axisXLeft->setLabelsAngle(-45); // 颜色 axisXLeft->setLabelsColor(Qt::red); // 加粗9号 font = axisXLeft->labelsFont(); font.setBold(true); font.setPointSize(9); axisXLeft->setLabelsFont(font);
效果:
int labelsAngle() const; void setLabelsAngle(int angle);
设置刻度标签的倾斜角度,默认为水平显示。
该属性发生改变时,触发
labelsAngleChanged(int angle)
信号。
QColor labelsColor() const; void setLabelsColor(QColor color); QBrush labelsBrush() const; void setLabelsBrush(const QBrush &brush);
轴刻度标签的颜色能够经过labelsColor者labelsBrush任一属性设置来实现。二者的区别在于被修改时触发的信号不同、修改labelsColor属性稍微便利些而已,且经过修改labelsBrush实现时也只支持修改QBrush颜色,而不支持QBrush的其它属性设置。实际上修改轴刻度标签颜色,内部都是经过设置QBrush来实现。
修改 labelsColor属性会触发labelsColorChanged(QColor color)
信号;修改labelsBrush属性会触发
labelBrushChanged(const QBrush &brush)
信号。
QFont labelsFont() const; void setLabelsFont(const QFont &font);
使用方式与修改轴标题字体相同。
该属性发生改变会触发
labelsFontChanged(const QFont &font)
信号。
bool labelsVisible() const; void setLabelsVisible(bool visible = true);
默认为显示刻度标签。
该属性修改时触发
labelsVisibleChanged(bool visible)
信号:
能够设置轴线显示/隐藏、轴线画笔、方向倒置。
例如显示轴线,并为其设置颜色为红色、宽度为2的画笔:
// 显示轴线 axisXLeft->setLineVisible(true); // 设置轴线画笔 QPen pen = axisXLeft->linePen(); pen.setColor(Qt::red); pen.setWidth(2); axisXLeft->setLinePen(pen);
效果:
bool isLineVisible() const; void setLineVisible(bool visible = true);
默认会显示轴线。
该属性发生改变时会触发
lineVisibleChanged(bool visible)
信号。
QPen linePen() const; void setLinePen(const QPen &pen);
经过设置轴线画笔,能够自定义轴线宽度、绘制颜色等。若是只须要修改轴线颜色,能够直接调用setLinePenClolor(QColor color)
方法。
改属性发生改变时会触发linePenChanged(const QPen &pen)
信号。经过
setLinePenColor
修改轴线颜色时会触发gridLineColorChanged(const QColor &color)
信号。
bool isReverse() const; void setReverse(bool reverse = true);
将坐标轴的极值方向翻转,左侧为默认reverse=false,右侧为翻转以后的效果:
注意:该属性仅在使用笛卡尔坐标系的图表上有效,好比折线、曲线、散点图和使用笛卡尔坐标系的面积图。
reverse值改变时会触发
reverseChanged(bool)
信号。
QtCharts的坐标轴网格线分为主网格线gridLine和次网格线minorGridLine,主网格线至关于刻度线的延申(例如在QValueAxis),次网格线分布在相邻的两条主网格线之间,且次网格线须要由QAbstractAxis
的子类,即具体类型的坐标轴实现才能支持。
以QValueAxis为例,显示主次网格线并设置颜色:
// 设置网格线/刻度数量 axisXLeft->setTickCount(5); axisXLeft->setMinorTickCount(5); // 主网格线 axisXLeft->setGridLineVisible(true); axisXLeft->setGridLineColor(Qt::darkGray); // 次网格线 axisXLeft->setMinorGridLineVisible(true); axisXLeft->setMinorGridLineColor(Qt::gray);
效果:
// 获取/设置显示主网格线,默认显示 bool isGridLineVisible() const; void setGridLineVisible(bool visible = true); // 获取/设置显示次网格线,默认不显示 bool isMinorGridLineVisible() const; void setMinorGridLineVisible(bool visible = true);
gridVisible改变时触发gridVisibleChanged(bool visible)
信号。minorGridVisible改变时触发
minorGridVisibleChanged(bool visible)
信号。
// 设置主网格线画笔 QPen gridLinePen() const; void setGridLinePen(const QPen &pen); // 设置次网格线画笔 QPen minorGridLinePen() const; void setMinorGridLinePen(const QPen &pen);
与轴线颜色的设置相似,若是只须要修改网格线的颜色,能够直接调用对应的setGridLineColor(const QColor &color)
或者setMinorGridLineColor(const QColor &color)
方法快速设置。
gridLinePen改变时触发gridLinePenChanged(const QPen &pen)
信号。minorGridLinePen改变时触发
minorGridLinePenChanged(const QPen &pen)
信号。gridLineColor改变时触发
gridLineColorChanged(const QPen &pen)
信号。minorGridLineColor改变时触发
minorGridLineColorChanged(const QPen &pen)
信号。
QtCharts坐标轴阴影指的是相邻主网格线之间的区域。QAbstractAxis
中提供了对阴影边框(shadesBorder)、阴影区域(shadesArea)的设置:
以QValueAxis
为例,设置坐标轴的阴影边框和填充:
// 显示阴影区域,包括阴影边框 axisXLeft->setShadesVisible(true); // 设置阴影边框 QPen sPen = axisXLeft->shadesPen(); sPen.setWidth(5); sPen.setColor(Qt::yellow); axisXLeft->setShadesPen(sPen); //axisXLeft->setShadesBorderColor(Qt::darkYellow); // 设置阴影区域颜色填充 axisXLeft->setShadesBrush(QBrush(QColor(48,157,255,125))); //axisXLeft->setShadesColor(Qt::blue);
效果:
QColor shadesBorderColor() const; void setShadesBorderColor(QColor color); QPen shadesPen() const; void setShadesPen(const QPen &pen);
设置阴影边框,若是只须要改变颜色能够直接调用setShadesBorderColor(QColor)
,须要设置更多属性能够调用setShadesPen(const QPen&)
为阴影边框设置一个画笔对象。
shadesBorderColor属性改变会触发shadesBorderColorChanged(QColor color)
信号。shadesPen属性改变会触发
shadesPenChanged(const QPen &pen)
信号。
QBrush shadesBrush() const; void setShadesBrush(const QBrush &brush); QColor shadesColor() const; void setShadesColor(QColor color);
设置阴影区域填充,若是只须要修改颜色能够直接使用setShadesColor(QColor)
,须要设置更多效果能够调用setShadesBrush(const QBrush&)
为阴影区域设置一个画刷,例如,设置画刷的填充风格为DiagCrossPattern
:
QBrush sBrush = axisXLeft->shadesBrush(); sBrush.setColor(QColor(48,157,255,125)); // 设置画刷风格 sBrush.setStyle(Qt::BrushStyle::DiagCrossPattern); axisXLeft->setShadesBrush(sBrush);
效果:
shadesBrush值修改会触发shadesBrushChanged(const QBrush &brush)
信号。shadesColor值修改会触发
shadesColorChanged(QColor color)
信号。