最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++圖形界面開發(fā)Qt教程:嵌套圓環(huán)示例

 更新時間:2021年08月13日 09:34:31   作者:不如溫暖過生活  
這篇文章主要介紹了C++實現(xiàn)圖形界面開發(fā)Qt教程,涉及坐標(biāo)函數(shù)的應(yīng)用及圖形界面程序設(shè)計,需要的朋友可以參考下,希望能給你帶來幫助

Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺式機(jī)操作系統(tǒng)以及移動操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M的試用版。

Qt組件推薦:

  • QtitanRibbon| 下載試用: 遵循Microsoft Ribbon UI Paradigm for Qt技術(shù)的Ribbon UI組件,致力于為Windows、Linux和Mac OS X提供功能完整的Ribbon組件。
  • QtitanChart | 下載試用 :是一個C ++庫,代表一組控件,這些控件使您可以快速地為應(yīng)用程序提供漂亮而豐富的圖表。并且支持所有主要的桌面

嵌套圓環(huán)圖

此示例顯示如何使用QPieSeries API創(chuàng)建嵌套的圓環(huán)圖。

運行示例

要從Qt Creator運行示例,請打開歡迎模式并從示例中選擇示例。有關(guān)更多信息,請訪問構(gòu)建和運行示例。

創(chuàng)建嵌套圓環(huán)圖

讓我們首先創(chuàng)建一個QChartView實例并在其上啟用抗鋸齒。甲QChart對象然后從所獲得的QChartView實例。圖例被禁用,圖表的標(biāo)題被設(shè)置。最后一行啟用圖表的動畫。

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

定義了三個變量,用于定義圓環(huán)圖。最小和最大尺寸定義了整個甜甜圈的相對尺寸。minSize 是最小甜甜圈的相對內(nèi)部尺寸。maxSize 是最大甜甜圈的相對外部尺寸。

qreal minSize = 0.1;
qreal maxSize = 0.9;
int donutCount = 5;

以下代碼塊定義了各個甜甜圈及其切片。首先創(chuàng)建一個新的QPieSeries對象。每個甜甜圈中的切片數(shù)量是隨機(jī)的。內(nèi)部 for 循環(huán)使用隨機(jī)值創(chuàng)建切片,標(biāo)簽與值相同。接下來,切片的標(biāo)簽設(shè)置為可見,其顏色設(shè)置為白色。為了使示例更有趣,切片的懸停信號連接到小部件的插槽,稍后解釋其內(nèi)部工作原理。最后將切片添加到甜甜圈中。調(diào)整甜甜圈的大小以實現(xiàn)甜甜圈的嵌套。然后甜甜圈被添加到小部件的甜甜圈列表和圖表中。

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

最后,小部件被放置在應(yīng)用程序使用的布局中。

QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(chartView, 1, 1);
setLayout(mainLayout);

為了使示例更有趣,甜甜圈每 1.25 秒隨機(jī)旋轉(zhuǎn)一次。

updateTimer = new QTimer(this);
connect(updateTimer(updateTimer, &QTimer::timeout, this, &Widget::updateRotation););
updateTimer->start((1250);

小部件的 updatedRotation 槽定義如下。它遍歷所有甜甜圈并通過隨機(jī)值修改它們當(dāng)前的旋轉(zhuǎn)。

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 插槽代碼在下面提供。如果切片設(shè)置為爆炸,則停止控制甜甜圈旋轉(zhuǎn)的計時器。然后從切片中獲得切片的開始和結(jié)束角度。為了突出顯示選定的切片,所有其他甜甜圈從包含選定切片的那個切片向外放置,它們的開始和結(jié)束角度都被修改,這樣它們就不會“阻擋”突出顯示切片的道路。如果不再選擇切片,則返回原始狀態(tài)。

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

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

最新評論

探索| 射阳县| 肇东市| 敖汉旗| 石家庄市| 水城县| 比如县| 囊谦县| 海宁市| 天柱县| 临沧市| 米泉市| 康乐县| 凯里市| 福州市| 蒙城县| 安徽省| 梅河口市| 呼玛县| 嘉义市| 郧西县| 瑞安市| 杭锦后旗| 棋牌| 陕西省| 新蔡县| 邢台市| 桂东县| 伊宁县| 内乡县| 额济纳旗| 金堂县| 阳城县| 岚皋县| 潞西市| 三穗县| 奈曼旗| 蒙阴县| 江川县| 梅河口市| 阿尔山市|