Qt第二十一天

续接昨天
绘画饼图和堆叠柱状图

void MainWindow::on_btnBuildBarChart_clicked()//刷新柱状图
{
    buildBarChart();
}
void MainWindow::iniPieChart()//初始化PieChart
{
    QChart *chart=new QChart();
    chart->setTitle("PieChart");
    chart->setAnimationOptions(QChart::AllAnimations);
    ui->chartViewPie->setChart(chart);
    ui->chartViewPie->setRenderHint(QPainter::Antialiasing);
}
void MainWindow::buildPieChart()//创建饼状图
{
    QChart *chart=ui->chartViewPie->chart();//获取chart
    chart->removeAllSeries();
    int colNo=1+ui->cBoxCourse->currentIndex();
    QPieSeries *series=new QPieSeries();//创建序列
    series->setHoleSize(ui->spinHoleSize->value());//设置空心大小
    for(int i=0;i<4;i++)
    {
        QTreeWidgetItem *item=ui->treeWidget->topLevelItem(i);
        series->append(item->text(0),item->text(colNo).toFloat());
    }
    QPieSlice *slice;
    for(int i=0;i<4;i++)//设置每个分块的标签文字
    {
        slice=series->slices().at(i);
        slice->setLabel(slice->label()+QString::asprintf("%.0f人,%.1f%",slice->value(),slice->percentage()*100));
        //connect(slice,SIGNAL(hovered(bool)),this,SLOT())
    }
    slice->setExploded(true);//切片分离
    series->setLabelsVisible(true);
    chart->addSeries(series);
    chart->setTitle(ui->cBoxCourse->currentText());
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}


void MainWindow::on_btnDrawPieChart_clicked()//刷新PieChart
{
    buildPieChart();
}
void MainWindow::iniStackedBar()//初始化StackedBar
{
    QChart *chart=ui->chartViewStackedBar->chart();
    chart->setTitle("StackBar");
    chart->setAnimationOptions(QChart::AllAnimations);
    ui->chartViewStackedBar->setChart(chart);
    ui->chartViewStackedBar->setRenderHint(QPainter::Antialiasing);
}
void MainWindow::buildStackedBar()//创建StackedBar
{
    QChart *chart=ui->chartViewStackedBar->chart();//获取QChart对象
    chart->removeAllSeries();
    chart->removeAxis(chart->axisX());
    chart->removeAxis(chart->axisY());
    //创建三门课程的数据集
    QBarSet *setMath=new QBarSet(theModel->horizontalHeaderItem(colNoMath)->text());
    QBarSet *setChinese=new QBarSet(theModel->horizontalHeaderItem(colNoChinese)->text());
    QBarSet *setEnglish=new QBarSet(theModel->horizontalHeaderItem(colNoEnglish)->text());
    for(int i=0;i<theModel->rowCount();i++)
    {
        setMath->append(theModel->item(i,colNoMath)->text().toInt());
        setChinese->append(theModel->item(i,colNoChinese)->text().toInt());
        setEnglish->append(theModel->item(i,colNoEnglish)->text().toInt());
    }
    //创建QStackedBarSeries对象,并添加数据集
    QStackedBarSeries *series=new QStackedBarSeries();
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
    series->setLabelsVisible(true);//显示每段的标签
    chart->addSeries(series);//添加序列到图表
    //创建横轴
    QStringList categories;
    for(int i=0;i<theModel->rowCount();i++)
    {
        categories<<theModel->item(i,colNoName)->text();
    }
    QBarCategoryAxis *axisX=new QBarCategoryAxis();//类别坐标轴作为横轴
    axisX->append(categories);
    chart->setAxisX(axisX);
    axisX->setRange(categories.at(0),categories.at(categories.count()-1));
    //数值坐标轴作为纵轴
    QValueAxis *axisY=new QValueAxis();
    axisY->setRange(0,300);
    axisY->setTitleText("总分");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.0f");
    chart->setAxisY(axisY);
    //设置图例
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}




void MainWindow::on_btnBuildStackedBar_clicked()//刷新碓叠柱状图
{
    buildStackedBar();
}


运行结果
在这里插入图片描述

在这里插入图片描述

### QT下载与十学习计划 #### 下载QT资源 用户可以访问官方站点或相关教程链接以获取QT的安装包和文档。对于不同操作系统,如Windows、macOS和Linux,有特定的安装方法[^1]。例如,在Windows上,用户可以通过下载`.exe`文件完成安装;在macOS上,则使用`.dmg`文件;而在Linux系统中,可以选择`.run`文件进行安装。此外,还有详细的安装教程可供参考,例如针对Ubuntu 20.04的Qt6.5.3安装指南[^1]。 #### 十学习计划概览 根据提供的引用内容,以下是一个简化的十QT学习计划: **第一** - 熟悉QT安装过程以及开发环境配置。确保能够成功运行一个简单的“Hello World”程序[^1]。 - 学习基础组件,如按钮和标签的使用[^2]。 **第二** - 深入了解信号与槽机制,并尝试构建一个简单的交互式界面,例如带有按钮点击事件的小型应用程序[^2]。 - 掌握QVariant的基本用法[^2]。 **第三** - 学习如何创建和管理窗口,包括新建、编辑、保存等功能[^3]。 - 实现文本读写操作,熟悉QFile和QTextStream类。 **第四** - 开发一个简易计算器项目,实践布局管理和基本算术运算逻辑[^4]。 **第五** - 设计并实现QQ登录界面,重点在于表单验证和用户输入处理[^4]。 **第六** - 使用QPainter进行基本绘图操作,绘制线条、矩形等图形元素。 **第七** - 探索多线程编程,理解如何安全地在不同线程间传递数据而不影响UI主线程[^4]。 **第八** - 学习动画效果,利用QPropertyAnimation实现移动、缩放和透明度变化等动态效果[^2]。 **第九** - 结合实际案例(如植物大战僵尸魔改版),综合运用前面所学知识完成更复杂的项目[^4]。 **第十** - 如果时间允许,还可以扩展到音视频录制功能的学习,通过alsa库实现录音播放等功能[^5]。 ```python # 示例代码:创建一个简单的窗口应用 from PyQt5.QtWidgets import QApplication, QLabel app = QApplication([]) label = QLabel('Hello Qt!') label.show() app.exec_() ``` #### 注意事项 - 在学习过程中遇到问题时,请查阅官方文档或搜索类似问题的解决方案。 - 对于初学者来说,建议从简单项目开始,逐步增加复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值