C++图形界面开发Qt教程:嵌套圆环示例

目录
  • 嵌套圆环图
    • 运行示例
  • 总结

Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用。而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行。现在我们为你提供了免费的试用版。

Qt组件推荐:

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 :是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面

嵌套圆环图

此示例显示如何使用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);
}}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++实现坦克大战小游戏EGE图形界面

    C++ EGE 实现坦克大战小游戏,供大家参考,具体内容如下 因为有过一次用EGE写小游戏的经验,所以这一次写坦克大战快了很多.并且使用对象编程也简化了很多编程时繁琐的步骤. 写出坦克大战使我在学习编程的道路上又迈出了一大步. 如果您需要图片素材的,我可以单独发给您. 技术环节: 编译环境:Windows VS2019 需求: 控制坦克移动发射炮弹,炮弹可以消灭敌军坦克,且可以消灭砖块.坦克遇到方块会被挡住.敌军消灭我军三次或基地被毁则游戏失败,共摧毁十次敌方坦克游戏胜利. 思路: 先写出坦克的

  • C++ Opengl图形颜色功能附源码下载

    项目开发环境: 开发语言:C++和IDE:VS2017,操作系统Windows版本windows SDK8.1,三方库:OpenGL. 项目功能: 创建一个有颜色的图形. 项目源码如下: /*********************包含链接的库文件*******************************************************************************************/ #pragma comment( lib, "opengl32.l

  • C++用easyx图形库实现障碍跑酷小游戏

    用easyx图形库做一个简单的c++小游戏-障碍跑酷 开发环境:visual c++6.0 库:easyx图形库 下载地址 EasyX(c++图形库) v20200806 官方安装免费版 当时我原本是想模仿做一个Flappy Bird的小游戏,在想如何写的时候突然有了新的想法,就有了这个障碍跑酷的小游戏.(这是我之前写的代码,没有很注重规范,看上去有点乱,但我很尽力的都标上了注释.) 游戏介绍: 1.操控小球,小球一开始只具有左a,右d与跳跃w的功能 2.可根据按1,2,3,4调节小球的跳跃高度

  • C++基于easyx图形库实现推箱子游戏

    本文实例为大家分享了C++实现推箱子游戏的具体代码,供大家参考,具体内容如下 头文件: #include<stdio.h> #include<stdlib.h> //#include<Windows.h> #include<conio.h> #include<graphics.h> #include<stdbool.h> //播放音乐需要的头文件 #include <mmsystem.h> #pragma comment(

  • C++实现图形界面时钟表盘代码

    本文实例讲述了C++实现图形界面时钟表盘代码,分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: //POINT的数组可以这么用      POINT pt[]={          0, 450,          225,390,          390,225,          450,0,          390,-225,          225,-390,          0,-450,          -225,-390,          -390,-2

  • C++图形界面开发Qt教程:嵌套圆环示例

    目录 嵌套圆环图 运行示例 总结 Qt是一个跨平台框架,通常用作图形工具包,它不仅创建CLI应用程序中非常有用.而且它也可以在三种主要的台式机操作系统以及移动操作系统(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式设备,Android(Necessitas)和iOS的端口上运行.现在我们为你提供了免费的试用版. Qt组件推荐: QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for

  • Java有趣好玩的图形界面开发八个案例实现

    目录 1.复选框和单选框按钮组 2.文本编辑组件和滚动窗格 3.多个选项卡设置 4.在框架窗口中加入面板 5.在窗口中加入标签 6.框架中加入指定大小的标签 7.在框架窗口中加入按钮 8.框架窗口的创建 总结 虽然GUI技术没有很大的市场,甚至很多初学者放弃学习GUI,但是学习GUI编程的过程对于提高编程兴趣,深入理解Java编程有很大的作用.效果图如下,加油吧!! 1.复选框和单选框按钮组 —在框架窗口中加入复选框和单选框按钮组 import javax.swing.*; public cla

  • Java GUI图形界面开发实现小型计算器流程详解

    目录 一.设计目标 二.界面设计 三.功能实现 四.全部代码 五.功能测试 六.小结 一.设计目标 (1)主要功能:实现简单的加.减.乘.除等双目运算,和开平方.百分数等单目运算 (2)辅助功能:按钮“C”实现清空文本框:按钮“←”实现退格,删除文本框中最右边的一个字符 二.界面设计 创建“面板对象”,并设置其布局管理方式为5行4列的GridLayout布局方式,以用于容纳20个按钮.文本框和容纳20个按钮组件的面板则使用边界布局方式分别将其布局到窗体BorderLayout.NORTH和中央位

  • Java图形界面开发之简易记事本

    在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: package com.package3; /* * 功能:简易记事本的开发,可以保存文件,打开文件,退出记事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*

  • python GUI库图形界面开发之PyQt5拖放控件实例详解

    本篇,我们学习PyQt5界面中拖放(Drag 和Drop)控件. 拖放动作 在GUI中,拖放指的是点击一个对象,并将其拖动到另一个对象上的动作.比如百度云PC客户端支持的拖放文件以快速移动文件: 拖放动作能够很直观很方便的在GUI程序中完成一些很复杂或繁琐的操作. 在PyQt中实现拖放 在PyQt5中,我们也可以很轻松地使用拖放功能. 使用Qt设计师或者使用API都可以实现.我们先使用Qt设计师将GUI的图形设计出来,在之前的GUI的基础上,我们新建一个选项卡. 我们新建了一个选项卡,然后在里面

  • python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式,以达到美化图形界面的目的. 本篇文章中,我们就通过一个实际的例子,使用QSS和PyQt5的配置属性,实现图形用户界面的美化工作. 首先上效果图: 一.对界面进行布局和组件的布置 在图像界面编程中,一个好的布局有助于全局把控界面的形态,而在PyQt5中,有多种布局的方式供我们选择,比较常用的布局有以下

  • python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择

    PyQt中MainWindow, QWidget以及Dialog的区别和选择 1. Qt界面分类 在Qt Designer设计界面时,首先需要选择界面模板,主要分为三个类: Main Window Widget Dialog 2. 三种模板的区别(官方文档介绍) MainWindow QMainWindow类提供一个有菜单条.锚接窗口(例如工具条)和一个状态条的主应用程序窗口. 主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单.工具条和一个状态条.QMainWind

  • python图形界面开发之wxPython树控件使用方法详解

    wxPython树控件介绍 树(tree)是一种通过层次结构展示信息的控件,如下图所示是树控件示例,左窗口中是树控件,在wxPython中树控件类是wx.TreeCtrl. wx.TreeCtrl常用的方法有 AddRoot(text, image=-1, selImage=-1, data=None).添加根节点,text参数根节点显示的文本:image参数是该节点未被选中时的图片索引,wx.TreeCtrl中使用的图片被放到wx.ImageList图像列表中:selImage参数是该节点被选

  • python图形界面tkinter的使用技巧

    目录 一.python图形界面tk之滚动文本框的实现示例 二.python图形界面tk之控件随窗口自变化的实现示例 三.python图形界面tk之顶部菜单栏实现示例 四.python图形界面tk之多选框实现示例 五.python图形界面tk之打开文件实现示例 六.python图形界面tk之保存文件实现示例 一.python图形界面tk之滚动文本框的实现示例 使用python的tkinter库实现滚动文本框的方式,目前我知道的有两种,一种方式是使用frame容器来放置Text控件和Scrollba

  • python GUI库图形界面开发之PyQt5开发环境配置与基础使用

    PyQt5安装 在cmd下输入 pip install PyQt5 完成PyQt5安装,再安装qt designer,可以使用pip安装 pip install PyQt5-tools 安装完成后,在python安装目录下可以看到 配置PyCharm 配置PyCharm是为了在Pycharm里面实现打开qt designer,然后生成qt文件,然后将qt文件转换成python语言的软件文件. 打开Pycharm,按下图操作 打开Extrernal Tools之后,点击上如绿色的+,添加Tools

随机推荐