❝
本示例示範如何使用QPieSeries API建立嵌套的甜甜圈圖。
❞
建立嵌套甜甜圈圖
先建立一個QChartView執行個體并啟用抗鋸齒。然後從QChartView執行個體獲得一個QChart對象。
定義了三個變量,這些變量将用于定義甜甜圈圖。最小和最大尺寸定義整個甜甜圈的相對尺寸。minSize是最小甜甜圈的相對内部大小。maxSize是最大甜甜圈的相對外部尺寸。
下列代碼塊定義了各個甜甜圈及其切片。首先,建立一個新的QPieSeries對象。每個甜甜圈中的切片數量是随機的。内部的for循環使用随機值建立切片,并為其标記相同的值。
然後,将切片的标簽設定為可見,并将其顔色設定為白色。為了使示例更有趣,将切片的懸停信号連接配接到小部件的槽函數(
explodeSlice
)中,稍後将解釋其内部工作原理。最後,将切片添加到甜甜圈。調整甜甜圈的大小以實作甜甜圈的嵌套。然後,将甜甜圈添加到小部件的甜甜圈清單和圖表中。
最後,将小部件放置在應用程式使用的布局中。
為了使示例更有趣,甜甜圈每1.25秒随機旋轉一次。
小部件的
updatedRotation
槽函數如下定義。它周遊所有甜甜圈,并以随機值修改其目前的旋轉。
下面提供了前面提到的
explodeSlice
槽函數代碼。「如果切片設定為爆炸,則停止控制甜甜圈旋轉的計時器。」 然後從切片獲得切片的起始角度和終止角度。為了突出顯示標明的切片,從包含標明的切片的甜甜圈向外放置的所有其他甜甜圈都需要修改其起始角度和結束角度,以使它們不會"阻礙"突出顯示的切片。如果不再選擇切片,則傳回原始狀态。
void Widget::explodeSlice(bool exploded)
{
QPieSlice *slice = qobject_cast(sender());if (exploded) {
updateTimer->stop();
qreal sliceStartAngle = slice->startAngle();
qreal sliceEndAngle = slice->startAngle() + slice->angleSpan();
QPieSeries *donut = slice->series();
qreal seriesIndex = m_donuts.indexOf(donut);for (int i = seriesIndex + 1; i m_donuts.at(i)->setPieStartAngle(sliceEndAngle);
m_donuts.at(i)->setPieEndAngle(360 + sliceStartAngle);
}
} else {for (int i = 0; i m_donuts.at(i)->setPieStartAngle(0);
m_donuts.at(i)->setPieEndAngle(360);
}
updateTimer->start();
}
slice->setExploded(exploded);
}
關于更多
- 在「QtCreator軟體」可以找到:
- 或在以下「Qt安裝目錄」找到:
- 「相關連結」
- Qt君公衆号回複「Qt示例」擷取更多内容。