【嵌入式——QT】Charts常见的图表的绘制

【嵌入式——QT】Charts常见的图表的绘制

  • 柱状图
    • QBarSet
    • QBarSeries
    • QBarCategoryAxis
    • 图示
  • 饼图
  • 堆叠柱状图
  • 百分比柱状图
  • 散点图和光滑曲线图
  • 代码示例

柱状图

QBarSet

用于创建柱状图的数据集。

主要函数

  • setLabel():设置数据集标签 ;
  • setLabelBrush():设置标签的画刷 ;
  • setLabelColor():设置标签的文字颜色 ;
  • setLabelFont():设置标签的字体;
  • setBorderColor():设置数据集的棒图边框颜色;
  • setBrush():设置数据集的棒图画刷 ;
  • setColor():设置数据集的棒图填充颜色 ;
  • setPen():设置数据集的棒图边框画笔;
  • append():添加一个数据到数据集 ;
  • insert():在某个位置插入一个数据到数据集;
  • remove():从某个位置开始删除一定数量的数据 ;
  • replace():替换某个位置的数据 ;
  • at():返回某个位置的数据;
  • count():返回数据个数;
  • sum():返回数据集内所有数据的和;

QBarSeries

柱状图序列,一个柱状图序列一般包含多个QBarSet数据集。
主要函数

  • setBarWidth():设置数据棒的宽度;
  • setLabelsVisible():设置数据棒的标签可见性;
  • setLabelsFormat():设置数据棒的标签的格式;
  • setLabelsPosition():设置数据棒的标签的位置;
  • setLabelsAngle():设置数据棒的标签的角度;
  • append():添加一个QBarSet数据集序列;
  • insert():在某个位置插入一个QBarSet数据集到序列;
  • remove():移除一个数据集,并删除数据集对象;
  • take():移除出一个数据集,但是不删除数据集对象;
  • clear():清除全部数据集,并删除数据集对象;
  • barSets():返回数据集对象的列表;
  • count():返回数据集个数;

QBarCategoryAxis

柱状图分类坐标,以文字标签形式表示的坐标。
主要函数

  • append():添加一个类别到坐标轴;
  • insert():在某个位置插入一个类别到坐标轴;
  • replace():替换某个类别;
  • remove():删除某个类别;
  • clear():删除所有类别;
  • at():返回某个索引位置的类别文字;
  • count():返回类别的个数;
  • setCategories():设置一个QStringList字符串列表作为坐标轴的类别文字,删除原来所有类别文字;
  • setMin():设置坐标轴最小值;
  • setMax():设置坐标轴最大值;
  • setRange():设置坐标轴范围;

图示

在这里插入图片描述

饼图

在这里插入图片描述

堆叠柱状图

在这里插入图片描述

百分比柱状图

在这里插入图片描述

散点图和光滑曲线图

在这里插入图片描述

代码示例

QChartCommon.h

#ifndef QCHARTCOMMON_H
#define QCHARTCOMMON_H

#include <QMainWindow>
#include <QtCharts>

namespace Ui
{
    class QChartCommon;
}

#define fixedColumnCount 5 //列数
#define initDataRowCount 6 //学生个数
#define colNoName 0 //姓名列编号
#define colNoMath 1 //数学列编号
#define colNoChinese 2 //语文列编号
#define colNoEnglish 3 //英语列编号
#define colNoAverage 4 //平均分列编号



class QChartCommon : public QMainWindow
{
    Q_OBJECT

public:
    explicit QChartCommon(QWidget* parent = nullptr);
    ~QChartCommon();

    void initData();
    void initTreeWidget();
    void initBarChart();
    void buildBarChart();
    void initPieChart();
    void buildPieChart();
    void initStackedBar();
    void buildStackedBar();
    void initPercentBar();
    void buildPercentBar();
    void initScatterChart();
    void buildScatterChart();

public slots:
    void on_itemChanged(QStandardItem* item);
    void on_pieSliceHighlight(bool flag);
private slots:
    void on_tabWidget_currentChanged(int index);

    void on_comboBox_2_currentIndexChanged(int index);

    void on_pushButton_clicked();

    void on_comboBox_currentIndexChanged(int index);

private:
    Ui::QChartCommon* ui;
    QStandardItemModel* theModel;

    QChart* pieChart;
};

#endif // QCHARTCOMMON_H

QChartCommon.cpp

#include "QChartCommon.h"
#include "ui_QChartCommon.h"

#include <QTime>
QChartCommon::QChartCommon(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::QChartCommon)
{
    ui->setupUi(this);
    theModel = new QStandardItemModel(initDataRowCount, fixedColumnCount, this);
    initData();
    initTreeWidget();
    connect(theModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(on_itemChanged(QStandardItem*)));
    ui->tableView->setModel(theModel);
    initBarChart();
    initPieChart();
    initStackedBar();
    initPercentBar();
    initScatterChart();
    on_tabWidget_currentChanged(0);
}

QChartCommon::~QChartCommon()
{
    delete ui;
}

void QChartCommon::initData()
{
    QStringList headerList;
    headerList<<u8"姓名"<<u8"数据"<<u8"语文"<<u8"英语"<<u8"平均分";
    theModel->setHorizontalHeaderLabels(headerList);
    qsrand(QTime::currentTime().second());
    for(int i=0; i<theModel->rowCount(); i++) {
        QString studName = QString::asprintf(u8"学生%2d", i+1);
        QStandardItem* aItem = new QStandardItem(studName);
        aItem->setTextAlignment(Qt::AlignHCenter);
        theModel->setItem(i, colNoName, aItem);
        qreal avgScore = 0;
        for(int j=colNoMath; j<=colNoEnglish; j++) {
            qreal score = 50.0+(qrand()%50);
            avgScore+=score;
            QStandardItem*  aItem1 = new QStandardItem(QString::asprintf("%.0f", score));
            aItem1->setTextAlignment(Qt::AlignHCenter);
            theModel->setItem(i, j, aItem1);
        }
        QStandardItem*  aItem2 = new QStandardItem(QString::asprintf("%.1f", avgScore/3));
        aItem2->setTextAlignment(Qt::AlignHCenter);
        theModel->setItem(i, colNoAverage, aItem2);
    }
}

void QChartCommon::initTreeWidget()
{
    QTreeWidgetItem* item1 = new QTreeWidgetItem(1001);
    item1->setText(0, u8"60分以下");
    item1->setText(1, u8"1");
    item1->setText(2, u8"1");
    item1->setText(3, u8"1");
    item1->setText(4, u8"1");
    item1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
    ui->treeWidget->addTopLevelItem(item1);
    QTreeWidgetItem* item2 = new QTreeWidgetItem(1002);
    item2->setText(0, u8"60-69分");
    item2->setText(1, u8"2");
    item2->setText(2, u8"2");
    item2->setText(3, u8"2");
    item2->setText(4, u8"2");
    item2->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
    ui->treeWidget->addTopLevelItem(item2);
    QTreeWidgetItem* item3 = new QTreeWidgetItem(1003);
    item3->setText(0, u8"70-79分");
    item3->setText(1, u8"4");
    item3->setText(2, u8"3");
    item3->setText(3, u8"0");
    item3->setText(4, u8"6");
    item3->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
    ui->treeWidget->addTopLevelItem(item3);
    QTreeWidgetItem* item4 = new QTreeWidgetItem(1004);
    item4->setText(0, u8"80-89分");
    item4->setText(1, u8"1");
    item4->setText(2, u8"1");
    item4->setText(3, u8"2");
    item4->setText(4, u8"0");
    item4->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
    ui->treeWidget->addTopLevelItem(item4);
    QTreeWidgetItem* item5 = new QTreeWidgetItem(1005);
    item5->setText(0, u8"90分以上");
    item5->setText(1, u8"2");
    item5->setText(2, u8"0");
    item5->setText(3, u8"0");
    item5->setText(4, u8"0");
    item5->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);
    ui->treeWidget->addTopLevelItem(item5);
}

//柱状图
void QChartCommon::initBarChart()
{
    QChart* chart = new QChart();
    chart->setTitle(u8"Barchart演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->graphicsViewBar->setChart(chart);
    ui->graphicsViewBar->setRenderHint(QPainter::Antialiasing);
}
//柱状图
void QChartCommon::buildBarChart()
{
    QChart* chart = ui->graphicsViewBar->chart();//获取关联的chart
    chart->removeAllSeries();//删除所有序列
    chart->removeAxis(chart->axisX());//删除X轴
    chart->removeAxis(chart->axisY());//删除Y轴
    QBarSet* setMath = new QBarSet(theModel->horizontalHeaderItem(colNoMath)->text());
    QBarSet* setChinese = new QBarSet(theModel->horizontalHeaderItem(colNoChinese)->text());
    QBarSet* setEnglish = new QBarSet(theModel->horizontalHeaderItem(colNoEnglish)->text());
    QLineSeries* line = new QLineSeries();
    line->setName(theModel->horizontalHeaderItem(colNoAverage)->text());
    QPen pen;
    pen.setColor(Qt::red);
    pen.setWidth(2);
    line->setPen(pen);
    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());
        line->append(QPointF(i, theModel->item(i, colNoMath)->text().toFloat()));
    }
    //柱状图序列
    QBarSeries* series = new QBarSeries();
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
    chart->addSeries(series);
    chart->addSeries(line);
    //横坐标字符串
    QStringList categories;
    for(int i=0; i<theModel->rowCount(); i++) {
        categories<<theModel->item(i, colNoName)->text();
    }
    //横坐标
    QBarCategoryAxis* axisX = new QBarCategoryAxis();
    // axisX->append(categories);
    axisX->setCategories(categories);
    chart->setAxisX(axisX, series);
    chart->setAxisX(axisX, line);
    axisX->setRange(categories.at(0), categories.at(categories.count()-1));
    //纵坐标
    QValueAxis* axisY = new QValueAxis();
    axisY->setRange(0, 100);
    axisY->setTitleText(u8"分数");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.0f");
    chart->setAxisY(axisY, series);
    chart->setAxisY(axisY, line);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);
}

//饼图
void QChartCommon::initPieChart()
{
    pieChart = new QChart();
    pieChart->setTitle(u8"Piechart演示");
    pieChart->setAnimationOptions(QChart::SeriesAnimations);
    ui->graphicsViewPie->setChart(pieChart);
    ui->graphicsViewPie->setRenderHint(QPainter::Antialiasing);
    ui->comboBox->addItem(u8"数学", 0);
    ui->comboBox->addItem(u8"语文", 1);
    ui->comboBox->addItem(u8"英语", 2);
    ui->comboBox->addItem(u8"平均分", 3);
    ui->comboBox_2->addItem("ChartThemeLight", 0);
    ui->comboBox_2->addItem("ChartThemeBlueCerulean", 1);
    ui->comboBox_2->addItem("ChartThemeDark", 2);
    ui->comboBox_2->addItem("ChartThemeBrownSand", 3);
    ui->comboBox_2->addItem("ChartThemeBlueNcs", 4);
    ui->comboBox_2->addItem("ChartThemeHighContrast", 5);
    ui->comboBox_2->addItem("ChartThemeBlueIcy", 6);
    ui->comboBox_2->addItem("ChartThemeQt", 7);
    ui->doubleSpinBoxHole->setValue(0.20);
    ui->doubleSpinBoxPie->setValue(0.70);
}
//饼图
void QChartCommon::buildPieChart()
{
    QChart* chart = ui->graphicsViewPie->chart();
    chart->removeAllSeries();
    int colNo = 1+ui->comboBox->currentIndex();
    QPieSeries* series = new QPieSeries();
    //饼图中心空心的大小
    series->setHoleSize(ui->doubleSpinBoxHole->value());
    for(int i=0; i<=4; i++) {
        //添加分块数据
        QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i);
        series->append(item->text(0), item->text(colNo).toFloat());
        // series->append(ui->comboBox->itemText(i), 25.0);
    }
    QPieSlice* slice;//饼图分块
    for(int i=0; i<=4; i++) {
        slice=series->slices().at(i);//获取分块
        slice->setLabel(slice->label()+QString::asprintf(u8": %.0f 人,%.1f%%", slice->value(), slice->percentage()*100));
        connect(slice, SIGNAL(hovered(bool)), this, SLOT(on_pieSliceHighlight(bool)));
    }
    //最后一个设置为exploded
    slice->setExploded(true);
    //必须添加完slice之后再设置
    series->setLabelsVisible(true);
    //添加饼图序列
    chart->addSeries(series);
    chart->setTitle("Piechart---"+ui->comboBox->currentText());
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}
//堆叠图
void QChartCommon::initStackedBar()
{
    QChart* chart = new QChart();
    chart->setTitle(u8"StackedBar演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->graphicsViewStacked->setChart(chart);
    ui->graphicsViewStacked->setRenderHint(QPainter::Antialiasing);
}
//堆叠图
void QChartCommon::buildStackedBar()
{
    QChart* chart = ui->graphicsViewStacked->chart();
    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->setCategories(categories);
    chart->setAxisX(axisX);
    axisX->setRange(categories.at(0), categories.at(categories.count()-1));
    //创建Y轴
    QValueAxis* axisY = new QValueAxis();
    axisY->setRange(0, 300);
    axisY->setTitleText(u8"总分");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.0f");
    chart->setAxisY(axisY);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignTop);
}
//百分比柱状图
void QChartCommon::initPercentBar()
{
    QChart* chart = new QChart();
    chart->setTitle(u8"PercentBar演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->graphicsViewPercent->setChart(chart);
    ui->graphicsViewPercent->setRenderHint(QPainter::Antialiasing);
}
//百分比柱状图
void QChartCommon::buildPercentBar()
{
    QChart* chart = ui->graphicsViewPercent->chart();
    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());
    QTreeWidgetItem* item;
    QStringList categories;
    for(int i=0; i<=4; i++) {
        //添加分块数据
        item = ui->treeWidget->topLevelItem(i);
        categories<<item->text(0);
        setMath->append(item->text(colNoMath).toFloat());
        setChinese->append(item->text(colNoChinese).toFloat());
        setEnglish->append(item->text(colNoEnglish).toFloat());
    }
    QPercentBarSeries* series = new QPercentBarSeries();
    series->append(setMath);
    series->append(setChinese);
    series->append(setEnglish);
    series->setLabelsVisible(true);
    chart->addSeries(series);
    QBarCategoryAxis* axisX = new QBarCategoryAxis();
    axisX->setCategories(categories);
    chart->setAxisX(axisX);
    axisX->setRange(categories.at(0), categories.at(categories.count()-1));
    //创建Y轴
    QValueAxis* axisY = new QValueAxis();
    axisY->setRange(0, 100);
    axisY->setTitleText(u8"百分比");
    axisY->setTickCount(6);
    axisY->setLabelFormat("%.1f");
    chart->setAxisY(axisY, series);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}
//散点图
void QChartCommon::initScatterChart()
{
    QChart* chart = new QChart();
    chart->setTitle(u8"ScatterChart演示");
    chart->setAnimationOptions(QChart::SeriesAnimations);
    ui->graphicsViewScatter->setChart(chart);
    ui->graphicsViewScatter->setRenderHint(QPainter::Antialiasing);
}
//散点图
void QChartCommon::buildScatterChart()
{
    QChart* chart = ui->graphicsViewScatter->chart();
    chart->removeAllSeries();
    chart->removeAxis(chart->axisX());
    chart->removeAxis(chart->axisY());
    QSplineSeries* seriesLine = new QSplineSeries();
    seriesLine->setName("spline");
    QPen pen;
    pen.setColor(Qt::blue);
    pen.setWidth(2);
    seriesLine->setPen(pen);
    QScatterSeries* series0 = new QScatterSeries();
    series0->setName(u8"散点");
    series0->setMarkerShape(QScatterSeries::MarkerShapeCircle);
    series0->setBorderColor(Qt::black);
    series0->setBrush(QBrush(Qt::red));
    series0->setMarkerSize(12);
    qsrand(QTime::currentTime().second());
    for(int i=0; i<10; i++) {
        int x = (qrand()%20);
        int y= (qrand()%20);
        series0->append(x, y); //散点序列
        seriesLine->append(x, y); //光滑曲线
    }
    chart->addSeries(series0);
    chart->addSeries(seriesLine);
    chart->createDefaultAxes();//创建缺省坐标轴
    chart->axisX()->setTitleText(u8"X轴");
    chart->axisX()->setRange(-2, 22);
    chart->axisY()->setTitleText(u8"Y轴");
    chart->axisY()->setRange(-2, 22);
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignRight);
}

void QChartCommon::on_itemChanged(QStandardItem* item)
{
    if((item->column()<colNoMath) || (item->column()>colNoEnglish)) {
        return;
    }
    int rowNo = item->row();
    qreal avg = 0;
    QStandardItem* aItem;
    for(int i=colNoMath; i<=colNoEnglish; i++) {
        aItem = theModel->item(rowNo, i);
        avg += aItem->text().toDouble();
    }
    avg = avg/3;
    aItem = theModel->item(rowNo, colNoAverage);
    aItem->setText(QString::asprintf("%.1f", avg));
}

void QChartCommon::on_pieSliceHighlight(bool flag)
{
    QPieSlice* slice = (QPieSlice*)sender();
    slice->setExploded(flag);
}

void QChartCommon::on_tabWidget_currentChanged(int index)
{
    switch(index) {
        case 0:
            buildBarChart();
            break;
        case 1:
            buildPieChart();
            break;
        case 2:
            buildStackedBar();
            break;
        case 3:
            buildPercentBar();
            break;
        case 4:
            buildScatterChart();
            break;
    }
}


void QChartCommon::on_comboBox_2_currentIndexChanged(int index)
{
    switch(index) {
        case 0:
            pieChart->setTheme(QChart::ChartThemeLight);
            break;
        case 1:
            pieChart->setTheme(QChart::ChartThemeBlueCerulean);
            break;
        case 2:
            pieChart->setTheme(QChart::ChartThemeDark);
            break;
        case 3:
            pieChart->setTheme(QChart::ChartThemeBrownSand);
            break;
        case 4:
            pieChart->setTheme(QChart::ChartThemeBlueNcs);
            break;
        case 5:
            pieChart->setTheme(QChart::ChartThemeHighContrast);
            break;
        case 6:
            pieChart->setTheme(QChart::ChartThemeBlueIcy);
            break;
        case 7:
            pieChart->setTheme(QChart::ChartThemeQt);
            break;
    }
}


void QChartCommon::on_pushButton_clicked()
{
    buildPieChart();
}


void QChartCommon::on_comboBox_currentIndexChanged(int index)
{
    buildPieChart();
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/480160.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决arco-design下拉框回显id的问题

问题描述 下拉框回显选项中没有的选项&#xff0c;就会出现以下情况&#xff0c;只能把uid回显上去 解决方案 使用ui框架自带的属性fallback-option 用法 按以上操作&#xff0c;即可解决选择框回显uid问题

【数据结构】——排序之冒泡排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

使用CSS3画出一个叮当猫HTML源码

我们经常使用PS或者Flash制作动画&#xff0c;本文则介绍了如何用CSS3画出个叮当猫&#xff0c;实现过程很有趣&#xff0c;感兴趣的朋友可以参考一下 首先&#xff0c;先把HTML结构搭建好&#xff1a; <div class"wrapper"> <!--叮当猫整体--> <di…

【3GPP】【核心网】【4G】4G手机接入过程,手机附着过程(超详细)

1. 4G手机接入过程&#xff0c;手机附着过程 附着&#xff08;Attach&#xff09;&#xff1a; 终端在PLMN中注册&#xff0c;从而建立自己的档案&#xff0c;即终端上下文 进行附着的三种情况&#xff1a; ①终端开机后的附着&#xff0c;初始附着 ②终端从覆盖盲区返回到…

Day41:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏

目录 ASP-默认安装-MDB数据库泄漏下载 ASP-中间件-CVE&短文件&解析&写权限 HTTP.SYS&#xff08;CVE-2015-1635&#xff09;主要用作蓝屏破坏&#xff0c;跟权限不挂钩 IIS短文件(iis全版本都可能有这个问题) IIS文件解析 IIS写权限 ASP-SQL注入-SQLMAP使用…

基于python+vue的OA公文发文管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

数据挖掘与分析学习笔记

一、Numpy NumPy&#xff08;Numerical Python&#xff09;是一种开源的Python库&#xff0c;专注于数值计算和处理多维数组。它是Python数据科学和机器学习生态系统的基础工具包之一&#xff0c;因为它高效地实现了向量化计算&#xff0c;并提供了对大型多维数组和矩阵的支持…

鸿蒙预览报错 Only files in a module can be previewed

HarmonyOS第一课下载的源码无法运行&#xff0c;也无法预览&#xff0c;报错如题。 解决&#xff1a; 1、在预览页如“index.ets”文件下预览。 2、如果在通知栏看到如图提示&#xff0c;可看出是ohos/hvigor-ohos-plugin插件版本的问题&#xff0c;可点击蓝色解决方案同步并导…

01-Spark的Local模式与应用开发入门

1 Spark 的 local 模式 Spark 运行模式之一&#xff0c;用于在本地机器上单机模拟分布式计算的环境。在 local 模式下&#xff0c;Spark 会使用单个 JVM 进程来模拟分布式集群行为&#xff0c;所有 Spark 组件&#xff08;如 SparkContext、Executor 等&#xff09;都运行在同…

获取淘宝商品评论的爬虫技术分享(已封装API,可测试)

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,it…

基于python+vue网络相册设计与实现flask-django-nodejs-php

网络相册设计与实现的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&#xff0…

python 函数(解包**、互相调用、作用域、函数的封装、内置函数:eval()、zip()、文件处理open())

函数解包 """ 1、函数的注释&#xff1a;参数和返回值 在注释里可以自动添加显示&#xff0c;只需手动加说明。2、函数的解包【拆包】&#xff1a;函数的参数要传递数据有多个值的时候&#xff0c;中间步骤拿到数据 保存在元组或者列表 或者字典里。 - 传递参数…

机器学习-06-无监督算法-01-划分聚类Kmeans算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中无监督算法&#xff0c;包括划分聚类等。 参考 数据分析实战 | K-means算法——蛋白质消费特征分析 欧洲48国英文名称的来龙去脉及其国旗动画 Kmeans在线动态演示 本门课程的目标 完成一个特定行业的…

【C#】使用C#窗体应用开启/停止Apache、MySQL服务

目录 一、前言 二、效果图 三、配置文件 四、代码 五、一键启动/停止所有服务 一、前言 使用C#窗体应用开启Apache、MySQL服务&#xff0c;不仅仅是Apache、MySQL&#xff0c;其他服务也可以使用同样的方法操作&#xff0c;包括开启自己写的脚本服务。 二、效果图 两种状…

短视频矩阵系统--技术实际开发打板3年真实开发分享

短视频矩阵系统--技术实际开发打板3年真实开发分享&#xff0c;短视频矩阵系统/矩阵获客系统是一种基于短视频平台的获客游戏。短视频矩阵系统可以通过多账号发布来替代传统的单账号游戏。可以一键发布所有账号&#xff0c;批量制作多个视频AI智能剪辑。过去很多人只能完成的工…

新版仿蓝奏网盘|城通网盘|百度网盘|闪客网盘|网盘源码系统,个人网盘系统

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) 这是一款仿蓝奏网盘、城通网盘、百…

利用CSS3实现正在加载效果

一、代码区域 1.1css3代码 <style>* {padding: 0;margin: 0;list-style: none;}.loading {width: 300px;height: 100px;margin: 100px auto;}.loading ul {height: 100px;width: 65px;margin: 0 auto;display: flex;align-items: center;}.loading ul li {margin: 0 5p…

【XR806开发板试用】使用PWM模块模拟手机呼吸灯提示功能

一般情况下&#xff0c;我们的手机在息屏状态&#xff0c;当收到消息处于未读状态时&#xff0c;会有呼吸灯提醒&#xff0c;这次有幸抽中XR806开发板的试用&#xff0c;经过九牛二虎之力终于将环境搞好了&#xff0c;中间遇到各种问题&#xff0c;在我的另一篇文章中已详细描述…

Nginx 全局块配置 worker 进程的两个指令

1. 前言 熟悉 nginx 运行原理的都知道&#xff0c;nginx 服务启动后&#xff0c;会有一个 master 进程和多个 worker 进程&#xff0c;master 进程负责管理所有的 worker 进程&#xff0c;worker 进程负责处理和接收用户请求 在这里我们所要研究的是 master 进程一定要创建 wo…

后端前行Vue之路(一):初识Vue

1.Vue是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方…