C++图形界面开发Qt教程:嵌套圆环示例
目录
- 嵌套圆环图
- 运行示例
- 总结
Qt组件推荐:
- QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
- QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面
嵌套圆环图 此示例显示如何使用QPieSeries API创建嵌套的圆环图。
文章图片
运行示例
【C++图形界面开发Qt教程:嵌套圆环示例】要从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 = https://www.it610.com/article/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; ii < 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(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; ii < 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; ii < 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); }}
总结 本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- c++基础概念笔记
- 界面展示bug随笔
- 牛逼!C++开发的穿越丛林真人游戏,游戏未上线就有百万人气
- ubuntu开机默认进入命令行模式/用户图形界面
- C++Primer之|C++Primer之 函数探幽
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- QML基础信息
- 企业级/B端设计交互/界面规范(二)|企业级/B端设计交互/界面规范(二) 基础原则规范说明