QtCharts之QAbstractAxis類

文章首發自公衆號:: nullobject
我的站點: https://www.nullobject.cn
這篇文章主要講解QAbstractAxis類的API及其使用

0x00 QtCharts中座標軸結構

在學習QAbstractAxis類以前,須要先熟悉QtCharts中軸的組成元素都有哪些:c++

QtCharts座標軸組成

QtCharts中,一個座標軸的內容大體包含如下幾種:軸標題(title)軸刻度標籤(labels)軸線(lines)網格線(grid lines)、和軸陰影(shades)。經過QAbstractAxis能夠分別對以上幾種元素進行單獨控制。學習

0x01 設置標題

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

設置標題屬性

  • titleVisible:設置標題顯示
bool isTitleVisible() const;
void setTitleVisible(bool visible = true);

座標軸標題默認狀況下是顯示的。對象

修改該屬性時會觸發 titleVisibleChanged(bool visible)信號。
  • titleText:設置標題內容
QString titleText() const;
void setTitleText(const QString &title);

默認狀況下,QAbstractAxis不會設置任何標題內容。用戶能夠根據須要修改座標軸標題。rem

標題發生改變時會觸發 titleTextChanged(const QString &text)信號。
  • titleFont:設置標題字體
QFont titleFont() const;
void setTitleFont(const QFont &font);

該屬性經過QFont來設置標題的字體風格。get

該屬性發生改變時,會觸發 titleFontChanged(const QFont &font)信號。
  • titleBrush:設置標題顏色畫刷
QBrush titleBrush() const;
void setTitleBrush(const QBrush &brush);

注意目前只支持經過畫刷來設置顏色,不支持設置畫刷得其餘效果(如畫刷風格BrushStyle等)。it

該屬性發生改變會觸發 titleBrushChanged(const QBrush &brush)信號。

0x02 設置刻度標籤

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);

效果:

設置軸刻度標籤

  • labelsAngle:設置傾斜角度
int labelsAngle() const;
void setLabelsAngle(int angle);

設置刻度標籤的傾斜角度,默認爲水平顯示。

該屬性發生改變時,觸發 labelsAngleChanged(int angle)信號。
  • labelsColorlabelsBrush:設置顏色
QColor labelsColor() const;
void setLabelsColor(QColor color);

QBrush labelsBrush() const;
void setLabelsBrush(const QBrush &brush);

軸刻度標籤的顏色能夠經過labelsColorlabelsBrush任一屬性設置來實現。二者的區別在於被修改時觸發的信號不同、修改labelsColor屬性稍微便利些而已,且經過修改labelsBrush實現時也只支持修改QBrush顏色,而不支持QBrush的其它屬性設置。實際上修改軸刻度標籤顏色,內部都是經過設置QBrush來實現。

修改 labelsColor屬性會觸發 labelsColorChanged(QColor color)信號;

修改labelsBrush屬性會觸發labelBrushChanged(const QBrush &brush)信號。

  • labelsFont:設置字體風格
QFont labelsFont() const;
void setLabelsFont(const QFont &font);

使用方式與修改軸標題字體相同。

該屬性發生改變會觸發 labelsFontChanged(const QFont &font)信號。
  • labelsVisible:設置顯示/隱藏刻度標籤
bool labelsVisible() const;
void setLabelsVisible(bool visible = true);

默認爲顯示刻度標籤。

該屬性修改時觸發 labelsVisibleChanged(bool visible)信號:

0x03 設置軸線

能夠設置軸線顯示/隱藏、軸線畫筆、方向倒置。

  • 示例

例如顯示軸線,併爲其設置顏色爲紅色、寬度爲2的畫筆:

// 顯示軸線
axisXLeft->setLineVisible(true);  
// 設置軸線畫筆
QPen pen = axisXLeft->linePen();  
pen.setColor(Qt::red);            
pen.setWidth(2);                  
axisXLeft->setLinePen(pen);

效果:

設置軸線屬性

  • lineVisible:設置顯示軸線
bool isLineVisible() const;
void setLineVisible(bool visible = true);

默認會顯示軸線。

該屬性發生改變時會觸發 lineVisibleChanged(bool visible)信號。
  • linePen:設置軸線畫筆
QPen linePen() const;
void setLinePen(const QPen &pen);

經過設置軸線畫筆,能夠自定義軸線寬度、繪製顏色等。若是隻須要修改軸線顏色,能夠直接調用setLinePenClolor(QColor color)方法。

改屬性發生改變時會觸發 linePenChanged(const QPen &pen)信號。

經過setLinePenColor修改軸線顏色時會觸發gridLineColorChanged(const QColor &color)信號。

  • reverse:翻轉座標軸
bool isReverse() const;
void setReverse(bool reverse = true);

將座標軸的極值方向翻轉,左側爲默認reverse=false,右側爲翻轉以後的效果:

翻轉座標軸

注意:該屬性僅在使用笛卡爾座標系的圖表上有效,好比折線、曲線、散點圖和使用笛卡爾座標系的面積圖。

reverse值改變時會觸發 reverseChanged(bool)信號。

0x04 設置網格線

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);

效果:

設置網格線

  • gridVisibleminorGridVisible設置顯示網格線
// 獲取/設置顯示主網格線,默認顯示
bool isGridLineVisible() const;
void setGridLineVisible(bool visible = true);

// 獲取/設置顯示次網格線,默認不顯示
bool isMinorGridLineVisible() const;
void setMinorGridLineVisible(bool visible = true);
gridVisible改變時觸發 gridVisibleChanged(bool visible)信號。

minorGridVisible改變時觸發minorGridVisibleChanged(bool visible)信號。

  • gridLinePenminorGridLinePen設置網格線畫筆
// 設置主網格線畫筆
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)信號。

0x05 設置陰影

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);

效果:

設置座標軸陰影

  • shadesBorderColorshadesPen設置陰影邊框
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)信號。

  • shadesBrushshadesColor設置陰影區域填充
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)信號。

0x06 The End :)

相關文章
相關標籤/搜索