QT 视图(view)模型(model)汇总

news2024/11/15 3:56:09

QStringListModel和QListView

UI界面

widget头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QStringList>
#include <QStringListModel>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget {
    Q_OBJECT

public:
    Widget(QWidget* parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_checkBox_clicked(bool checked);

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_8_clicked(bool checked);

    void on_pushButton_9_clicked();

    void on_pushButton_10_clicked();

    void on_listView_clicked(const QModelIndex& index);

private:
    Ui::Widget* ui;
    QStringList m_strList;
    QStringListModel* m_model;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QStandardItemModel>>
Widget::Widget(QWidget* parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    m_strList << "北京"
              << "上海"
              << "山西"
              << "南京";
    m_model = new QStringListModel(this);
    m_model->setStringList(m_strList);
    ui->listView->setModel(m_model);
    ui->listView->setEditTriggers(QAbstractItemView::EditTrigger::DoubleClicked | QAbstractItemView::EditTrigger::SelectedClicked);
}

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

void Widget::on_pushButton_clicked()
{
    m_model->setStringList(m_strList);
}

void Widget::on_pushButton_2_clicked()
{
    m_model->removeRows(0, m_model->rowCount()); //删除行
}

void Widget::on_checkBox_clicked(bool checked)
{
    if (checked) {
        ui->listView->setEditTriggers(QAbstractItemView::EditTrigger::DoubleClicked | QAbstractItemView::EditTrigger::SelectedClicked);

    } else {
        ui->listView->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
    }
}

void Widget::on_pushButton_3_clicked()
{
    qDebug() << "行数" << m_model->rowCount();
    m_model->insertRow(m_model->rowCount()); //插入了行
    qDebug() << "插入后,行数" << m_model->rowCount();

    QModelIndex index = m_model->index(m_model->rowCount() - 1);

    m_model->setData(index, "new item", Qt::DisplayRole);

    ui->listView->setCurrentIndex(index);
}

void Widget::on_pushButton_4_clicked()
{
    QModelIndex index = ui->listView->currentIndex();
    m_model->insertRow(index.row()); //可以插入行
    //    m_model->insertRows(index.row(), 0); //会把行给换掉

    m_model->setData(index, "insert item", Qt::DisplayRole);
}

void Widget::on_pushButton_5_clicked()
{
    QModelIndex index;
    int curRow = ui->listView->currentIndex().row();
    m_model->moveRow(index, curRow, index, curRow - 1);
}

void Widget::on_pushButton_6_clicked()
{
    QModelIndex index;
    int curRow = ui->listView->currentIndex().row();
    m_model->moveRow(index, curRow, index, curRow + 2); //下移需要加2 ,因为两个行号的号,程序会进行自动调整
}

void Widget::on_pushButton_8_clicked(bool checked)
{
    if (checked) {
        m_model->sort(0, Qt::SortOrder::AscendingOrder); //升序
    } else {
        m_model->sort(0, Qt::SortOrder::DescendingOrder); //降序
    }
}

void Widget::on_pushButton_9_clicked()
{
    ui->plainTextEdit->clear();
}

void Widget::on_pushButton_10_clicked()
{
    ui->plainTextEdit->clear();
    QStringList tempList = m_model->stringList();
    for (int i = 0; i < tempList.count(); i++) {
        ui->plainTextEdit->appendPlainText(tempList.at(i));
    }
}

void Widget::on_listView_clicked(const QModelIndex& index)
{
    QString str = QString::asprintf("模型索引: row %d,column = %d", index.row(), index.column());
    qDebug() << str;
    qDebug() << m_model->data(index, Qt::DisplayRole);
}

 ui_widget.h

/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 6.3.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QListView>
#include <QtWidgets/QPlainTextEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:
    QVBoxLayout *verticalLayout_2;
    QSplitter *splitter;
    QGroupBox *groupBox;
    QGridLayout *gridLayout;
    QCheckBox *checkBox;
    QPushButton *pushButton_4;
    QPushButton *pushButton_3;
    QListView *listView;
    QPushButton *pushButton;
    QPushButton *pushButton_5;
    QPushButton *pushButton_2;
    QPushButton *pushButton_8;
    QPushButton *pushButton_7;
    QPushButton *pushButton_6;
    QGroupBox *groupBox_2;
    QVBoxLayout *verticalLayout;
    QPushButton *pushButton_9;
    QPushButton *pushButton_10;
    QPlainTextEdit *plainTextEdit;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QString::fromUtf8("Widget"));
        Widget->resize(800, 600);
        verticalLayout_2 = new QVBoxLayout(Widget);
        verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
        splitter = new QSplitter(Widget);
        splitter->setObjectName(QString::fromUtf8("splitter"));
        splitter->setOrientation(Qt::Horizontal);
        groupBox = new QGroupBox(splitter);
        groupBox->setObjectName(QString::fromUtf8("groupBox"));
        gridLayout = new QGridLayout(groupBox);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        checkBox = new QCheckBox(groupBox);
        checkBox->setObjectName(QString::fromUtf8("checkBox"));
        checkBox->setChecked(true);
        checkBox->setTristate(false);

        gridLayout->addWidget(checkBox, 0, 2, 1, 1);

        pushButton_4 = new QPushButton(groupBox);
        pushButton_4->setObjectName(QString::fromUtf8("pushButton_4"));

        gridLayout->addWidget(pushButton_4, 1, 1, 1, 1);

        pushButton_3 = new QPushButton(groupBox);
        pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));

        gridLayout->addWidget(pushButton_3, 1, 0, 1, 1);

        listView = new QListView(groupBox);
        listView->setObjectName(QString::fromUtf8("listView"));

        gridLayout->addWidget(listView, 3, 0, 1, 3);

        pushButton = new QPushButton(groupBox);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));

        gridLayout->addWidget(pushButton, 0, 0, 1, 1);

        pushButton_5 = new QPushButton(groupBox);
        pushButton_5->setObjectName(QString::fromUtf8("pushButton_5"));

        gridLayout->addWidget(pushButton_5, 2, 0, 1, 1);

        pushButton_2 = new QPushButton(groupBox);
        pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));

        gridLayout->addWidget(pushButton_2, 0, 1, 1, 1);

        pushButton_8 = new QPushButton(groupBox);
        pushButton_8->setObjectName(QString::fromUtf8("pushButton_8"));
        pushButton_8->setCheckable(true);
        pushButton_8->setChecked(false);

        gridLayout->addWidget(pushButton_8, 2, 2, 1, 1);

        pushButton_7 = new QPushButton(groupBox);
        pushButton_7->setObjectName(QString::fromUtf8("pushButton_7"));

        gridLayout->addWidget(pushButton_7, 1, 2, 1, 1);

        pushButton_6 = new QPushButton(groupBox);
        pushButton_6->setObjectName(QString::fromUtf8("pushButton_6"));

        gridLayout->addWidget(pushButton_6, 2, 1, 1, 1);

        splitter->addWidget(groupBox);
        groupBox_2 = new QGroupBox(splitter);
        groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
        verticalLayout = new QVBoxLayout(groupBox_2);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        pushButton_9 = new QPushButton(groupBox_2);
        pushButton_9->setObjectName(QString::fromUtf8("pushButton_9"));

        verticalLayout->addWidget(pushButton_9);

        pushButton_10 = new QPushButton(groupBox_2);
        pushButton_10->setObjectName(QString::fromUtf8("pushButton_10"));

        verticalLayout->addWidget(pushButton_10);

        plainTextEdit = new QPlainTextEdit(groupBox_2);
        plainTextEdit->setObjectName(QString::fromUtf8("plainTextEdit"));

        verticalLayout->addWidget(plainTextEdit);

        splitter->addWidget(groupBox_2);

        verticalLayout_2->addWidget(splitter);


        retranslateUi(Widget);

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
        groupBox->setTitle(QCoreApplication::translate("Widget", "1", nullptr));
        checkBox->setText(QCoreApplication::translate("Widget", "\345\205\201\350\256\270\347\274\226\350\276\221", nullptr));
        pushButton_4->setText(QCoreApplication::translate("Widget", "\346\217\222\345\205\245\351\241\271", nullptr));
        pushButton_3->setText(QCoreApplication::translate("Widget", "\346\267\273\345\212\240\351\241\271", nullptr));
        pushButton->setText(QCoreApplication::translate("Widget", "\346\201\242\345\244\215\345\210\227\350\241\250", nullptr));
        pushButton_5->setText(QCoreApplication::translate("Widget", "\344\270\212\347\247\273", nullptr));
        pushButton_2->setText(QCoreApplication::translate("Widget", "\346\270\205\351\231\244\345\210\227\350\241\250", nullptr));
        pushButton_8->setText(QCoreApplication::translate("Widget", "\346\216\222\345\272\217", nullptr));
        pushButton_7->setText(QCoreApplication::translate("Widget", "\345\210\240\351\231\244\351\241\271", nullptr));
        pushButton_6->setText(QCoreApplication::translate("Widget", "\344\270\213\347\247\273", nullptr));
        groupBox_2->setTitle(QCoreApplication::translate("Widget", "2", nullptr));
        pushButton_9->setText(QCoreApplication::translate("Widget", "\346\270\205\347\251\272\346\226\207\346\234\254", nullptr));
        pushButton_10->setText(QCoreApplication::translate("Widget", "\346\230\276\347\244\272\346\225\260\346\215\256\346\250\241\345\236\213", nullptr));
    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGET_H

QTableview和QStandItemModel

UI界面

 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QFileDialog>
#include <QItemSelectionModel>
#include <QRegularExpression>
#include <QStringList>
MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    labCurFile = new QLabel("当前文件", this);
    labCurFile->setMinimumWidth(200);
    labCellPos = new QLabel("当前单元格", this);
    labCellPos->setMinimumWidth(200);

    labCellText = new QLabel("单元格内容", this);
    labCellText->setMinimumWidth(200);

    ui->statusbar->addWidget(labCurFile);
    ui->statusbar->addWidget(labCellPos);
    ui->statusbar->addWidget(labCellText);

    m_model = new QStandardItemModel(2, FixedColumnCount, this);

    m_selection = new QItemSelectionModel(m_model, this);
    ui->tableView->setModel(m_model); //设置模型
    ui->tableView->setSelectionModel(m_selection); //设置选择的模型
    ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置选择的方式
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems); //设置选择行为
    connect(m_selection, &QItemSelectionModel::currentChanged, this, &MainWindow::do_currentChanged);
}

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

void MainWindow::initModelData(QStringList& list)
{
    int rowCount = list.size();
    qDebug() << "行数" << rowCount;
    m_model->setRowCount(rowCount - 1); //设置行数减一
    QString header = list.at(0);
    //通过正则表达式将数据分开
    QStringList headList = header.split(QRegularExpression(R"(\s+)"), Qt::SkipEmptyParts); // \s+匹配空字符
    m_model->setHorizontalHeaderLabels(headList);
    qDebug() << headList;
    QStandardItem* item;
    int j;
    for (int i = 1; i < rowCount; i++) {
        QString alineText = list.at(i);
        QStringList tempList = header.split(QRegularExpression(R"(\s+)"), Qt::SkipEmptyParts); // \s+匹配空字符
        for (j = 0; j < FixedColumnCount - 1; j++) {
            item = new QStandardItem(headList.at(j));
            m_model->setItem(i - 1, j, item);
        }
        item = new QStandardItem(list.at(j));
        item->setCheckable(true);
        item->setBackground(QBrush(Qt::yellow));
        if (tempList.at(j) == "0") {
            item->setCheckState(Qt::CheckState::Unchecked);
        } else {
            item->setCheckState(Qt::CheckState::Checked);
        }
    }
}

void MainWindow::do_currentChanged(const QModelIndex& current, const QModelIndex& previous)
{
    Q_UNUSED(previous); //消除没有使用过的警告
    //当前改变触发
    qDebug() << "改变:" << previous.row() << previous.column(); //上次的位置
    if (current.isValid()) {
        labCellPos->setText(QString::fromStdString("当前单元格:%1行,%2列").arg(current.row()).arg(current.column()));
        QStandardItem* item = m_model->itemFromIndex(current);
        labCellText->setText("单元格内容: " + item->text());
        ui->pushButton_9->setChecked(item->font().bold());
    }
}

void MainWindow::on_pushButton_clicked()
{
    QString curPath = QCoreApplication::applicationDirPath(); //获取当前应用程序的路径
    QString fileName = QFileDialog::getOpenFileName(this, "打开文件", "./", "数据文件(*.txt);;所有文件(*.*)");

    if (fileName.isEmpty())
        return;
    //不为空
    qDebug() << fileName;
    QFile f = QFile(fileName);
    if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
        return;
    QStringList list;
    ui->plainTextEdit->clear();
    QTextStream astream(&f); //设置文件数据流,传入的是文本流
    while (!astream.atEnd()) {
        QString str = astream.readLine();
        ui->plainTextEdit->appendPlainText(str);
        list.append(str);
    }
    f.close();

    //    qDebug() << "加载完成" << list;
    labCurFile->setText("当前文件:" + fileName);
    ui->btn_add->setEnabled(true);
    ui->btn_insert->setEnabled(true);
    ui->btn_remove->setEnabled(true);
    initModelData(list);
}

void MainWindow::on_pushButton_2_clicked()
{
    ui->plainTextEdit->clear();
    //处理表头
    QStandardItem* aitem;
    QString str;
    for (int i = 0; i < m_model->columnCount(); ++i) {
        aitem = m_model->horizontalHeaderItem(i);
        str += aitem->text();
        str += '\t';
    }
    ui->plainTextEdit->appendPlainText(str);

    //处理内容
}

void MainWindow::on_btn_add_clicked()
{
    QList<QStandardItem*> list;
    QStandardItem* aitem;
    for (int i = 0; i < m_model->columnCount() - 1; ++i) {
        aitem = new QStandardItem("0");
        list << aitem;
    }
    QString str = m_model->headerData(m_model->columnCount() - 1, Qt::Horizontal).toString();
    aitem = new QStandardItem(str);
    aitem->setCheckable(true);
    aitem->setBackground(QBrush(Qt::yellow));

    list << aitem;
    m_model->insertRow(m_model->rowCount(), list);

    m_selection->clearSelection();
    m_selection->setCurrentIndex(m_model->index(m_model->rowCount() - 1, 0), QItemSelectionModel::Select); //选中
}

void MainWindow::on_btn_insert_clicked()
{
    QList<QStandardItem*> list;
    QModelIndex index;
    QStandardItem* aitem;
    for (int i = 0; i < m_model->columnCount() - 1; ++i) {
        aitem = new QStandardItem("1");
        list << aitem;
    }
    QString str = m_model->headerData(m_model->columnCount() - 1, Qt::Horizontal).toString();
    aitem = new QStandardItem(str);
    aitem->setCheckable(true);
    aitem->setBackground(QBrush(Qt::yellow));

    list << aitem;
    index = m_selection->currentIndex();
    m_model->insertRow(index.row(), list);

    m_selection->clearSelection();
    m_selection->setCurrentIndex(index, QItemSelectionModel::Select); //选中
}

void MainWindow::on_btn_remove_clicked()
{
    QModelIndex index = m_selection->currentIndex();
    //    m_model->setRowCount(m_model->rowCount());
    qDebug() << "当前行" << index.row();
    qDebug() << "行总数" << m_model->rowCount() - 1;

    if (index.row() != m_model->rowCount() - 1) {
        m_model->removeRow(index.row());

        m_selection->setCurrentIndex(index, QItemSelectionModel::Select);
    } else {
        m_model->removeRow(index.row());
    }
}

void MainWindow::on_pushButton_6_clicked()
{
    if (!m_selection->hasSelection())
        return;
    QModelIndexList indexList = m_selection->selectedIndexes();
    for (auto index : indexList) {
        m_model->itemFromIndex(index)->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
    }
}

void MainWindow::on_pushButton_8_clicked()
{
    if (!m_selection->hasSelection())
        return;
    QModelIndexList indexList = m_selection->selectedIndexes();
    for (auto index : indexList) {
        m_model->itemFromIndex(index)->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
    }
}

void MainWindow::on_pushButton_7_clicked()
{
    if (!m_selection->hasSelection())
        return;
    QModelIndexList indexList = m_selection->selectedIndexes();
    for (auto index : indexList) {
        m_model->itemFromIndex(index)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
    }
}

void MainWindow::on_pushButton_9_clicked(bool checked)
{
    if (!m_selection->hasSelection())
        return;
    QModelIndexList indexList = m_selection->selectedIndexes();
    for (auto index : indexList) {
        //        QFont font = m_model->itemFromIndex(index)->font();
        //        font.setBold(checked);
        //        m_model->itemFromIndex(index)->setFont(font);
        QFont f;
        f.setBold(checked);
        m_model->itemFromIndex(index)->setFont(f);
    }
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QItemSelectionModel>
#include <QLabel>
#include <QMainWindow>
#include <QModelIndex>
#include <QStandardItem>
#include <QStandardItemModel>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget* parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow* ui;
    QLabel* labCurFile;
    QLabel* labCellPos;
    QLabel* labCellText;
    const int FixedColumnCount = 6;
    QStandardItemModel* m_model;
    QItemSelectionModel* m_selection;
    void initModelData(QStringList& lsit);
private slots:
    void do_currentChanged(const QModelIndex& current, const QModelIndex& previous);
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_btn_add_clicked();
    void on_btn_insert_clicked();
    void on_btn_remove_clicked();
    void on_pushButton_6_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_7_clicked();
    void on_pushButton_9_clicked(bool checked);
};
#endif // MAINWINDOW_H

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

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

相关文章

全面升级 | MoHub 2023b版本正式上线

为了满足装备数字化发展需求&#xff0c;为知识模型化与模型开放共享提供自主平台&#xff0c;同元软控于2023年初推出来工业知识模型互联服务平台MoHub。7月27日&#xff0c;工业知识模型互联平台MoHub 2023b如期升级上线。此次升级&#xff0c;面向平台用户重点在云化工具、知…

PDU+远控,企业如何应用工业级智能PDU远程赋能业务?

在很多企业级业务场景下&#xff0c;如何保障相关业务设备的稳定供电非常重要&#xff0c;插座也就成为了这些业务体系中的核心基建。 为了保证相关设备供电的稳定&#xff0c;并且实现高效的远程管理&#xff0c;很多企业级的业务场景会部署专业的智能PDU&#xff0c;而在众多…

医疗器械维修工程师心得

彩虹医械维修技能班9月将开展本年第三期长期班&#xff0c;目前咨询人员也陆续多了起来&#xff0c;很多刚了解到医疗行业的&#xff0c;自身也没有多少相关的基础&#xff0c;在咨询时会问到没有基础能否学的会&#xff1f; 做了这行业的都知道&#xff0c;无论多么复杂的设备…

探讨缓存一致性问题

探讨缓存一致性问题 本文只探讨只读缓存&#xff0c;即只对缓存进行读取、写入、删除&#xff0c;不进行更新操作 前言 数据库的读写性能上限是比较低的&#xff0c;工程中经常在数据库前面加一层缓存&#xff0c;可能是Redis或者本地缓存。既然有缓存&#xff0c;那么不可避免…

归并交换基数简单选择排序

文章目录 1 交换排序1.1 冒泡排序1.1.1 冒泡排序算法1.1.2 性能分析 1.2 快速排序1.2.1 快排的算法1.2.2 性能分析1.2.3 快排的特点 2 简单选择排序2.1 简单排序算法2.1.1 性能分析 2.2 堆排序2.2.1 堆的调整2.2.2 筛选过程算法2.2.3 堆的建立算法2.2.4 性能分析 3 归并排序3.1…

CertGetCertificateChain trust error CERT_TRUST_REVOCATION_STATUS_UNKNOWN

执行命令&#xff1a; curl --cacert http_ca.crt -u elastic https://localhost:9200 结果报错了 直接访问https://localhost:9200/ &#xff0c;正常 解决办法&#xff1a; curl --cacert http_ca.crt -u elastic https://localhost:9200 --insecure

微信小程序:实现提示窗确定,取消执行不同操作(消息提示确认取消)showModal

效果 代码 wx.showModal({title: 提示,content: 是否确认退出,success: function (res) {if (res.confirm) {console.log(用户点击确定)} else if (res.cancel) {console.log(用户点击取消)}}})

linux 故障定位

linux 故障定位 1. cpu1.1 说明1.2 分析工具1.3 使用方式 2. 内存2.1 说明2.2 分析工具2.3 使用方式 3. I/O3.1 说明3.2 分析工具3.3 使用方式 4. 网络4.1 说明4.2 分析工具4.3 使用方式 5. 系统负载5.1 说明5.2 分析工具5.3 使用方式 6. 火焰图6.1 说明6.2 安装依赖库6.3 安装…

应用程序流量警报软件

为了避免因使用资源密集型应用程序&#xff08;如基于云的应用程序&#xff09;而出现的潜在中断和延迟问题&#xff0c;企业需要监控应用程序流量并尽快找到网络事件的根本原因。业务的应用程序流量监视是了解业务关键型应用程序何时具有高时间可用性以及何时存在利用率超过基…

网上订货系统源码 购买后交付一些什么内容

随着电子商务的快速发展&#xff0c;越来越多的企业开始意识到建立一个高效的网上订货系统的重要性。网上订货系统不仅可以提高企业的销售效率&#xff0c;还可以降低成本&#xff0c;提升客户满意度。然而&#xff0c;要建立一个完善的网上订货系统并不容易&#xff0c;需要考…

SpringMVC 拦截器详解

目录 一、介绍 二、过滤器与拦截器的简单对比 三、自定义拦截器 四、注册拦截器 五、案例演示-登录拦截器 5.1 自定义拦截器 5.2 注册拦截器 编写的初衷是为了自己巩固复习&#xff0c;如果能帮到你将是我的荣幸❣️ 一、介绍 SpringMVC提供的拦截器类似于JavaWeb中的过…

火山引擎VeDI最新分享:消费行业的数据飞轮从“四更”开始

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 数据飞轮&#xff0c;正在为消费行业的数字化升级提供一套全新模式。 在刚刚结束的《全链路增长&#xff1a;数据飞轮转动消费新生力》专场活动上&#xff0c;火山引…

事务隔离:为什么你改了我还看不见

前提概要 你肯定不陌生&#xff0c;和数据库打交道的时候&#xff0c;我们总是会用到事务。最经典的例子就 是转账&#xff0c;你要给朋友小王转 100 块钱&#xff0c;而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作&#xff0c;比如查询余额、做加减法…

第五章 Scala 变量与运算符

1 变量 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址&#xff0c;变量创建后会占用一定的内存空间。基于变量的数据类型&#xff0c;操作系统会进行内存分配并且决定什么将被储存在保留内存中。因此&#xff0c;通过给变量分配不同的数据类型&#xff0c;你…

MyBatis查询数据库入门学习<一>

目录 1.MyBatis 是什么&#xff1f; MyBatis官网&#xff1a;mybatis – MyBatis 3 | 简介 2.为什么要学习 MyBatis&#xff1f; 3.怎么学MyBatis&#xff1f; 4.第⼀个MyBatis查询 4.1 创建数据库和表 4.2 添加MyBatis框架⽀持 4.2.1 ⽼项⽬添加MyBatis 4.2.2 新项⽬添…

Git时间:版本控制工具进阶

Git时间&#xff1a;版本控制工具进阶 忽略文件 Git允许用户将指定的文件或目录排除在版本控制之外&#xff0c;它会检查代码仓库的目录下是否存在一个名为.gitignore的文件&#xff0c;如果存在&#xff0c;就去一行行读取这个文件中的内容&#xff0c;并把每一行指定的文件…

Matlab的SimuLink对FS32K144编程--SPI通讯控制12bitDAC输出

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 1、硬件介绍&#xff0c;DAC芯片&#xff1a;AD5328BRUZ DAC_SPI_SCK----PTD0(SPI1) DAC_SPI_DIN----PTE0(SPI1)单片…

Android 之 使用 SoundPool 播放音效

本节引言&#xff1a; 第九章给大家带来的是Android中的多媒体开发&#xff0c;与其说是多媒体开发还不如是多媒体相关API的 的使用&#xff0c;说下实际开发中我们做了一些和多媒体搭边的东西&#xff1a;拍照&#xff0c;录音&#xff0c;播放音乐&#xff0c;播放视频... 嗯…

stable-diffusion-webui汉化教程

第一种方法 1.打开stable diffusion webui&#xff0c;进入"Extensions"选项卡 2.点击"Install from URL" 3、注意"URL for extension’s git repository"下方的输入框 4、填入地址&#xff1a;https://github.com/VinsonLaro/stable-diffus…

让企业出海支付流程更加安全,亚马逊云科技推出支付加密服务

在咖啡店买一杯咖啡&#xff0c;在电商平台下单一件商品&#xff0c;其消费流程背后&#xff0c;都要涉及到金融支付的多个环节&#xff0c;而其中对金融数据存储和流通的加密则是保障金融安全的重要环节。 加密是保障消费者支付流程安全的最大挑战。亚马逊云科技首席安全布道…