Qt QChart 图形可视化







具体过程就不仔细说了。会在代码中讲解

头文件:

#ifndef YANGSEN_H
#define YANGSEN_H
#include<QWidget>
#include<QGridLayout>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QDebug>
#include<QPieSeries>
#include<QComboBox>
QT_CHARTS_USE_NAMESPACE
class yangsen:public QWidget
{
    Q_OBJECT
public:
    explicit yangsen(QWidget *parent = 0);
    QGridLayout *grid;
    QChartView *view;
    QChart *show();//显示折线图
    QChart *show1();//显示扇形图
    QChart *show2();//设置曲线图
    QChart *showdcout();//设置圆饼
    QComboBox *ComBox;
    QComboBox *combox1;
    QVector<QChartView*>viewlist;
public slots:
    void change();//设置标签函数
    void change1();//设置主题函数
};
#endif // YANGSEN_H
 

源文件:

#include"yangsen.h"

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QDebug>
#include<QPieSeries>
#include<QVector>
#include<QSplineSeries>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QLabel>
QT_CHARTS_USE_NAMESPACE
yangsen::yangsen(QWidget *widget):QWidget(widget)
{
    //初始化下拉框,label
    ComBox=new QComboBox;
    ComBox->addItem("No-legen");
    ComBox->addItem("left");
    ComBox->addItem("right");
    ComBox->addItem("buttom");
    QHBoxLayout *hb=new QHBoxLayout;
    QLabel *label1=new QLabel("Theme:");
    combox1=new QComboBox;
    combox1->addItem("BlueCerulean");
    combox1->addItem("BlueIcy");
    combox1->addItem("BrownSand");
    combox1->addItem("Dark");
    QLabel *label=new QLabel("Legend:");
    hb->addWidget(label1);
    hb->addWidget(combox1);
    hb->addWidget(label);
    hb->addWidget(ComBox);
    //增加间距之间的可延展性。
    hb->addStretch();
    //两个下拉框对应的槽函数
   connect(ComBox,SIGNAL(currentTextChanged(QString)),this,SLOT(change()));
   connect(combox1,SIGNAL(currentTextChanged(QString)),this,SLOT(change1()));
    grid=new QGridLayout;
    //往画布中添加折线图
    view=new QChartView(show());
    viewlist<<view;
    grid->addWidget(view,1,0);
    //往画布中添加扇形图
    view=new QChartView(show1());
    viewlist<<view;
    grid->addWidget(view,1,1);
     //往画布中添加曲线图
    view=new QChartView(show2());
    grid->addWidget(view,2,0);
    viewlist<<view;
    //往画布中添加圆饼图
    view=new QChartView(showdcout());
    grid->addWidget(view,2,1);
    viewlist<<view;
    grid->addLayout(hb,0,0,1,2);
    setLayout(grid);
}
QChart*  yangsen::show()
{
    QLineSeries *series=new QLineSeries;
    *series<<QPointF(0, 6)<<QPointF(2,5)<<QPointF(4,3)<<QPointF(5,5)<<QPointF(8,8)<<QPointF(9,5);
    QChart *ch=new QChart;
    ch->addSeries(series);
    ch->createDefaultAxes();
    ch->legend()->setAlignment(Qt::AlignBottom);
    ch->setTitle("Qt");
    ch->setAnimationOptions(QChart::SeriesAnimations);
   return ch;
}
QChart*  yangsen::show1()
{
    QPieSeries  *pieSeries = new QPieSeries();
    pieSeries->append("Java", 40);
    pieSeries->append("C#", 20);
    pieSeries->append("JS", 10);
    pieSeries->append("C/C++", 30);
    QChart *ch=new QChart;
    ch->addSeries(pieSeries);
    ch->createDefaultAxes();
    ch->setTitle("Qt");
    ch->setAnimationOptions(QChart::SeriesAnimations);
    ch->legend()->setAlignment(Qt::AlignBottom);
    return ch;
}
void yangsen::change()
{
    QChartView *chartView;
        if(ComBox->currentIndex()!=0)
        {
                foreach (chartView, viewlist) {
                    switch(ComBox->currentIndex())
                    {
                    case 1: chartView->chart()->legend()->setAlignment(Qt::AlignTop);break;
                    case 2: chartView->chart()->legend()->setAlignment(Qt::AlignBottom);break;
                    case 3: chartView->chart()->legend()->setAlignment(Qt::AlignLeft);break;
                    case 4: chartView->chart()->legend()->setAlignment(Qt::AlignRight);break;
                    }
                    chartView->chart()->legend()->show();
                }
        }
        else {
            viewlist.at(0)->chart()->legend()->hide();
            viewlist.at(1)->chart()->legend()->hide();
            viewlist.at(2)->chart()->legend()->hide();
            viewlist.at(3)->chart()->legend()->hide();
        }
}
QChart* yangsen::show2()
{
    QSplineSeries *serial=new QSplineSeries;
    *serial<<QPointF(0, 1)<<QPointF(2,2)<<QPointF(3,4)<<QPointF(5,2)<<QPointF(8,1.5)<<QPointF(9,3);
    QChart *ch=new QChart;
    ch->addSeries(serial);
    ch->createDefaultAxes();
    ch->legend()->setAlignment(Qt::AlignBottom);
    ch->setTitle("Qt");
    ch->setAnimationOptions(QChart::SeriesAnimations);
   return ch;
}
QChart* yangsen::showdcout()
{
    QPieSeries *pie=new QPieSeries;
    pie->append("C# 20%", 20);
    QPieSlice *slice =  pie->append("JS 10%", 10);
    slice->setExploded();
    slice->setLabelVisible();
    pie->append("Java 40%", 40);
    pie->setHoleSize(0.4);
    pie->append("C/C++ 30%", 30);
    QChart *ch=new QChart;
    ch->addSeries(pie);
    ch->createDefaultAxes();
    ch->legend()->setAlignment(Qt::AlignBottom);
    ch->setTitle("Qt");
    ch->setAnimationOptions(QChart::SeriesAnimations);
   return ch;
}
void yangsen::change1()
{
    QChartView *view;
    //创建调色板
    QPalette pal = window()->palette();
    foreach(view,viewlist)
    {
        switch(combox1->currentIndex())
        {
        case 0:view->chart()->setTheme(QChart::ChartThemeBlueCerulean);
            pal.setColor(QPalette::Window, QRgb(0x40434a));
            pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6));   break;
        case 1:view->chart()->setTheme(QChart::ChartThemeBlueIcy);
            pal.setColor(QPalette::Window, QRgb(0xcee7f0));
            pal.setColor(QPalette::WindowText, QRgb(0x404044));break;
        case 2:view->chart()->setTheme(QChart::ChartThemeBrownSand);
            pal.setColor(QPalette::Window, QRgb(0x9e8965));
            pal.setColor(QPalette::WindowText, QRgb(0x404044));break;
        case 3:view->chart()->setTheme(QChart::ChartThemeDark);
            pal.setColor(QPalette::Window, QRgb(0x121218));
            pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6));break;
        }
    }
    //这句挺重要的,没有他,就相当于设置的调色板没有生成、
     window()->setPalette(pal);
}
main.c文件

#include <QtWidgets/QApplication>

#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QDebug>
#include"yangsen.h"
QT_CHARTS_USE_NAMESPACE
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    yangsen *yang=new yangsen();
    QMainWindow window;
    window.setCentralWidget(yang);
    window.setWindowTitle("Miss------");
    window.resize(600, 450);
    window.show();
//![5]
 
    return a.exec();
}


                
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一款跨平台的C++图形用户界面应用程序开发框架,其提供了一些工具和类库,能够构建图形界面、网络、数据库、XML和数据可视化等各类应用程序。数据可视化在数据分析、预测、决策等方面十分重要,而Qt也是一种很好的工具来进行数据可视化。 对于Qt的数据可视化大作业,可以从以下几个方面入手: 1. 数据的获取与处理:首先需要确定可视化的数据,根据数据来源不同,获取数据的方法也会有所不同。可以是从API、文件、数据库中获取。接着需要对数据进行处理,对于数据的缺失、异常值和重复值进行处理。 2. 界面设计:界面设计应该具有易操作性和简洁明了性的特点,可以考虑使用Qt Designer创建界面,包括图表、下拉菜单、按钮等控件,同时界面的可扩展性也要考虑到。 3. 数据的可视化:选择合适的图表类型来展示数据,如折线图、环形图、散点图、3D图等。需要对图表进行美化,如添加标题、坐标轴标签和刻度值等。 4. 交互性:可以在界面中添加一些交互性的控件,如滑动条、复选框、下拉菜单,能够增加用户对数据的掌控度和趣味性。 5. 数据的输出:完成数据可视化之后,需要将可视化结果输出。可以考虑将数据图表保存为图片或PDF格式,也可以将数据导出为Excel格式等。 在进行Qt的数据可视化大作业时,需要遵循良好的软件工程原则,包括模块化、代码复用和文档化等,同时要注意代码的可读性和可维护性,使得代码具有良好的可扩展性和稳定性。 ### 回答2: 本人设计的数据可视化大作业是采用QT技术进行实现,旨在对数据进行可视化展示。数据可视化是数据分析的重要手段,能够将数据转化为图像,直观、简洁地展示数据信息,帮助人们更好地理解和分析数据。 本次作业以医疗数据为例,通过可视化展示患者的身高体重指数(BMI)、年龄、性别等信息,帮助医学研究人员分析患者群体情况,对各种疾病的发病率、筛查标准等进行研究。采用QT技术实现的优势在于其具有良好的跨平台性和界面友好性,结合数据的可视化效果,更好地满足了医学研究人员的工作需要。 在制作过程中,我使用QT中的QChart来绘制各种图表,例如:折线图、饼图等。同时结合QTableWidget控件对数据进行管理,方便用户快速选择并展示不同类别的数据。在交互体验方面,我还使用了QT提供的信号与槽机制,结合用户操作,使得用户能够自由切换不同的展示效果。 通过这次作业的制作,我不仅学习到了数据可视化技术的应用,还深刻体验到QT技术的跨平台性和方便易用性。最终,我将本次制作的QT数据可视化大作业,作为自己数据可视化学习的重要记录。 ### 回答3: 在数据可视化大作业中,使用Qt框架来进行数据可视化,可以实现一些非常强大和实用的功能。Qt提供了非常丰富的界面设计,具有跨平台特性,能够在不同的操作系统平台上进行开发和部署,灵活性和可移植性很高。 在数据可视化大作业中,我们可以使用Qt图形界面功能来设计数据界面和图表,将数据呈现出来,通过算法和可视化方法等来分析数据的规律和特征。同时,还可以使用Qt的数据模型功能,将数据存储和管理起来,方便操作和查询。通过增加数据可视化方案,Qt可视化方面成就非同凡响。 为了实现一个成功的数据可视化,还需要考虑一些因素,例如数据的精度、数据的规模、数据的类型、数据的样本和数据的分析等方面。通过对这些因素的认真考虑和策划,我们可以设计出非常有用的、有效的和实用的数据可视化程序,为人们的日常生活和工作提供便利。 总的来说,数据可视化大作业Qt是一个既有挑战性又充满创意性的大型项目。只有对数据有良好的理解,对算法有深入的了解和掌握,才能打造出一个既实用又精美的数据可视化程序,为我们的生活和工作带来极大的便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值