精華|使用教程|編輯:鮑佳佳|2021-08-11 10:34:57.360|閱讀 157 次
概述:Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。
Qt組件推薦:
此示例顯示如何使用QPieSeries API創建嵌套的圓環圖。
要從Qt Creator運行示例,請打開歡迎模式并從示例中選擇示例。有關更多信息,請訪問構建和運行示例。
讓我們首先創建一個QChartView實例并在其上啟用抗鋸齒。甲QChart對象然后從所獲得的QChartView實例。圖例被禁用,圖表的標題被設置。最后一行啟用圖表的動畫。
QChartView *chartView = new QChartView; chartView->setRenderHint(QPainter::Antialiasing); QChart *chart = chartView->chart(); chart->legend()->setVisible(false); chart->setTitle("Nested donuts demo"); chart->setAnimationOptions(QChart::AllAnimations);
定義了三個變量,用于定義圓環圖。最小和最大尺寸定義了整個甜甜圈的相對尺寸。minSize 是最小甜甜圈的相對內部尺寸。maxSize 是最大甜甜圈的相對外部尺寸。
qreal minSize = 0.1; qreal maxSize = 0.9; int donutCount = 5;
以下代碼塊定義了各個甜甜圈及其切片。首先創建一個新的QPieSeries對象。每個甜甜圈中的切片數量是隨機的。內部 for 循環使用隨機值創建切片,標簽與值相同。接下來,切片的標簽設置為可見,其顏色設置為白色。為了使示例更有趣,切片的懸停信號連接到小部件的插槽,稍后解釋其內部工作原理。最后將切片添加到甜甜圈中。調整甜甜圈的大小以實現甜甜圈的嵌套。然后甜甜圈被添加到小部件的甜甜圈列表和圖表中。
for (int i = 0; i < donutCount; i++) { QPieSeries *donut = new QPieSeries; int sliceCount = 3 + QRandomGenerator::global()->bounded(3); for (int j = 0; j < sliceCount; j++) { qreal value = 100 + QRandomGenerator::global()->bounded(100); QPieSlice *slice = new QPieSlice(QString("%1").arg(value), value); slice->setLabelVisible(true); slice->setLabelColor(Qt::white); slice->setLabelPosition(QPieSlice::LabelInsideTangential); connect(slice, &QPieSlice::hovered, this, &Widget::explodeSlice); donut->append(slice); donut->setHoleSize(minSize + i * (maxSize - minSize) / donutCount); donut->setPieSize(minSize + (i + 1) * (maxSize - minSize) / donutCount); } m_donuts.append(donut); chartView->chart()->addSeries(donut); }
最后,小部件被放置在應用程序使用的布局中。
QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(chartView, 1, 1); setLayout(mainLayout);
為了使示例更有趣,甜甜圈每 1.25 秒隨機旋轉一次。
updateTimer = new QTimer(this); connect(updateTimer(updateTimer, &QTimer::timeout, this, &Widget::updateRotation);); updateTimer->start((1250);
小部件的 updatedRotation 槽定義如下。它遍歷所有甜甜圈并通過隨機值修改它們當前的旋轉。
void WidgetWidget::updateRotation()() {{ for ((int i = 0; i i < m_donuts.count(); i(); i++) { { QPieSeries *donut = m_donuts.at(i); (i); qreal phaseShift = -50 + QRandomGenerator::global()()->bounded((100); donut->setPieStartAngle(donut(donut->pieStartAngle() () + phaseShift);); donut->setPieEndAngle(donut(donut->pieEndAngle() () + phaseShift);); }} }}
前面提到的explodeSlice 插槽代碼在下面提供。如果切片設置為爆炸,則停止控制甜甜圈旋轉的計時器。然后從切片中獲得切片的開始和結束角度。為了突出顯示選定的切片,所有其他甜甜圈從包含選定切片的那個切片向外放置,它們的開始和結束角度都被修改,這樣它們就不會“阻擋”突出顯示切片的道路。如果不再選擇切片,則返回原始狀態。
void WidgetWidget::explodeSlice(bool exploded)(bool exploded) {{ QPieSlice *slice = qobject_cast<QPieSlice *>(sender()); sender()); if (exploded) {(exploded) { updateTimer->stop(); (); qreal sliceStartAngle = slice->startAngle(); (); qreal sliceEndAngle = slice->startAngle() () + slice->angleSpan();(); QPieSeries *donut = slice->series(); (); qreal seriesIndex = m_donuts.indexOf(donut); (donut); for ((int i = seriesIndex + 1; i i < m_donuts.count(); i(); i++) { { m_donuts.at(i)(i)->setPieStartAngle(sliceEndAngle);(sliceEndAngle); m_donuts.at(i)(i)->setPieEndAngle((360 + sliceStartAngle);); }} } } else { { for ((int i = 0; i i < m_donuts.count(); i(); i++) { { m_donuts.at(i)(i)->setPieStartAngle((0); m_donuts.at(i)(i)->setPieEndAngle((360); }} updateTimer->start();(); }} slice->setExploded(exploded);(exploded); }}
====================================================
想要了解或購買Qt正版授權的朋友,歡迎
Qt技術交流群現已開通,QQ搜索群號“765444821”或者掃描下方二維碼即可加入
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: