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

news2024/12/23 22:08:16

【嵌入式——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();
}


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复习斐波那契(用C++写)

或者这样写&#xff1a; 斐波那契数列 题目描述 斐波那契数列是指这样的数列&#xff1a;数列的第一个和第二个数都为 1 1 1&#xff0c;接下来每个数都等于前面 2 2 2 个数之和。 给出一个正整数 a a a&#xff0c;要求斐波那契数列中第 a a a 个数是多少。 输入格式…

Windows下MySQL服务启动常见的两种方式,完美适配Mysql5.7,MySql8.0

文章目录 一、图形界面下启动mysql服务二、在命令行重新启动mysql服务3 推荐阅读4 源码获取&#xff1a; Windows系统下&#xff0c;MySQL服务的启动&#xff0c;常见的两种启动方式如下&#xff1a; 一、图形界面下启动mysql服务 在图形界面下启动mysql服务的流程如下&#x…

算法体系-13 第十三 二叉树的基本算法+二叉树的递归套路

一 完全二叉树的判断 1.1 描述 完全二叉树&#xff1a;他每一层都是满的&#xff0c;即使不满也是最后一层不满&#xff0c;最后一层不满也是从左到右变满的&#xff1b;话句话说就是 完全二叉树从根结点到倒数第二层满足完美二叉树&#xff0c;最后一层可以不完全填充&#x…

Elasticsearch数据存储优化方案

优化Elasticsearch数据存储有助于提升系统性能、降低成本、提高数据查询效率以及增强系统的稳定性和可靠性。通常我们再优化Elasticsearch数据存储会遇到一些问题&#xff0c;导致项目卡壳。以下是优化Elasticsearch数据存储的一些重要作用&#xff1a; 1、问题背景 在某些场景…

我的春招求职面经

智能指针在面试时经常被问到&#xff0c;最近自己也在写&#xff0c;有一点思考&#xff0c;于是找到了这样一个题目&#xff0c;可以看看&#xff0c;上面这个代码有什么问题&#xff1f;留言区说出你的答案吧&#xff01; 最后分享一下之前的实习->春招->秋招等文章汇总…

地质灾害在线监测,精准预警智能化

自然灾害无情且威力巨大,对人类生命财产安全造成严重威胁。地质灾害作为重要的自然灾害类型之一,给人类社会带来了沉重的经济损失和生命威胁。及时掌握地质灾害信息,提高预警能力和监测水平,是保障人民群众生命财产安全的当务之急。&#xff08;key-iot.com.cn/18703.html&…

Juniper SRX 防火墙基础上网配置

简介 基于PNET-LAB模拟器&#xff0c;使用 vSRX-NG 23.4R1.9 镜像进行实验。 博客&#xff1a;https://songxwn.com/Juniper-SRX-snat/ 实验需求 配置WAN口 LAN口&#xff0c;实现基础的上网功能。配置NAT、DHCP。 ISP 路由器使用Cisco IOS模拟&#xff0c;与SRX对接口配置…

docker镜像安装空间不足no space left on device

报错&#xff1a;Error processing tar file(exit status 1): open /usr/local/lib/libmkl_tbb_thread.so.1: no space left on device 原先docker模型保存位置&#xff1a; docker info -f ‘{{ .DockerRootDir}}’ docker 高点版本&#xff0c;这里26.0 解决参考&#xf…

力扣---零钱兑换---动态规划

思路&#xff1a; 这是一道典型的动态规划问题&#xff08;希望下次不用提示&#xff0c;能直接认出来&#xff09;&#xff1a;我将g[i]定义为总金币为i所需的最少硬币个数。所以递推公式可以表示为&#xff1a;g[i]min(g[i-1],g[i-2],g[i-5])1&#xff0c;也就是g[i]min(g[i-…

demo版多人聊天系统

目录 ​编辑 一&#xff0c;引入 二&#xff0c;在Server端修改的代码 1&#xff0c;保存用户信息功能实现 2&#xff0c;拼接消息 3&#xff0c;广播消息 三&#xff0c; Client端要修改的代码 四&#xff0c;效果演示 一&#xff0c;引入 在上一篇文章udp网络服务器中&a…

Java-Java基础学习(4)-多线程(2)

3.7. Lambda表达式 为什么要使用lambda表达式 避免匿名内部类定义过多&#xff1b;可以让代码看起来更简洁&#xff1b;去掉一堆没有意义的代码&#xff0c;只留下核心逻辑 属于函数式编程的概念&#xff0c;格式 (params) -> expression [表达式](params) -> statement…

山东省大数据局副局长禹金涛一行莅临聚合数据走访调研

3月19日&#xff0c;山东省大数据局党组成员、副局长禹金涛莅临聚合数据展开考察调研。山东省大数据局数据应用管理与安全处处长杨峰&#xff0c;副处长都海明参加调研&#xff0c;苏州市大数据局副局长汤晶陪同。聚合数据董事长左磊等人接待来访。 调研组一行参观了聚合数据展…

安装OneNote for Win10 | Win10/Win11

前言 PC端的OneNote分为2个版本&#xff0c;分别是Microsoft Store版本和Office版本&#xff0c;Microsoft Store版本即为OneNote for Win10&#xff0c;此版的OneNote有最近笔记功能&#xff0c;但检索功能不如Office版本&#xff0c;个人认为2个版本各有优劣。 但OneNote f…

详细剖析多线程(更新中...)

文章目录 前言一、认识线程1.1线程概念1.2为什么要有线程1.3线程和进程的区别&#xff08;经典面试题&#xff09; 二、创建线程2.1继承 Thread 类,重写run2.2实现 Runnable 接口,重写run2.3继承 Thread 类,重写run&#xff0c;匿名内部类2.4实现 Runnable 接口,重写run&#x…

WEB 表单练习题

任务如图&#xff1a; <html><head><meta charest"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><body><table width"…

解决nginx报错nginx: [emerg] unknown log format main in 的方法

目录 一、故障描述1&#xff1a; 重启nginx是出现了如下错误 解决办法 二、故障描述2&#xff1a; 解决办法&#xff1a; 三、nginx介绍​ 四、nginx原理 五、nginx.conf配置文件 六、nginx负载均衡 七、正向代理、反向代理 一、故障描述1&#xff1a; 在添加Nginx的…

【WEEK4】 【DAY3】整合SSM框架之功能实现—修改、删除数据【中文版】

2024.3.20 Wednesday 接上文【WEEK4】 【DAY2】整合SSM框架之功能实现—总览、添加数据【中文版】 目录 7.6.修改功能7.6.1.修改BookController.java7.6.2.修改allBook.jsp7.6.3.新建updateBook.jsp7.6.4.修改MyBatis-config.xml7.6.5.运行 7.7.删除功能7.7.1.修改BookContro…

网络原理(4)——TCP协议的特性

目录 一、滑动窗口 1、ack丢了 2、数据丢了 二、流量控制&#xff08;流控&#xff09; 三、拥塞控制 拥塞窗口动态变化的规则 四、延时应答 五、捎带应答 六、面向字节流 七、异常情况 &#xff08;1&#xff09;进程崩溃了 &#xff08;2&#xff09;其中一方关机…

Ubuntu系统提示“/dev/mmcblk0p1 分区满了‘以及磁盘空间不够的处理办法

查看boot分区使用空间&#xff1a; df 查看已安装的内核版本&#xff1a; dpkg --get-selections | grep linux &#xff08;其中带image的一般就是旧版本&#xff0c;deinstall代表已经删除的旧版本&#xff0c;install代表还未删除的旧版本内核&#xff09; 查看系统当前…

基于java+springboot+vue实现的健身房管理系统(文末源码+Lw+ppt)23-523

摘 要 健身房管理的以往工作流程繁杂、多样、管理复杂与设备维护繁琐。而如今计算机已完全能够胜任健身房管理工作&#xff0c;而且更加准确、方便、快捷、高效、清晰、透明&#xff0c;它完全可以克服以上所述的不足之处。这将给查询信息和管理带来很大的方便&#xff0c;从…