二、UI文件设计与运行机制

一、UI文件设计与运行机制

1、创建工程

在这里插入图片描述
在这里插入图片描述

2、添加控件,实现按钮点击

(1)添加控件

在这里插入图片描述

(2)添加信号和槽

在这里插入图片描述

2、分析项目结构

test_02test_02.pro			Qt工程文件Headerswidget.h		设计的窗体类的头文件Sourcesmain.cpp		主程序入口文件widget.cpp		窗体类的实现文件Formswidget.ui		界面文件,使用XML格式描述远见及布局../build-xxx/ui_widget.h	组件、信号与槽实现的文件,根据ui界面文件编译自动生成

(1)项目管理文件

后缀为.pro
# 包含的模块
QT       += core gui
# 大于Qt4版本才包含widget模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 应用程序的名称,生成可执行程序的名称
TARGET = test_02
# 模板类型,应用程序模板
TEMPLATE = app# 定义编译选项
#  QT_DEPRECATED_WARNINGS:当Qt的某些功能被标记为过时的,那么编译器会发出警告
DEFINES += QT_DEPRECATED_WARNINGS# 编译器版本
CONFIG += c++11
# 源文件
SOURCES += \main.cpp \widget.cpp
# 头文件
HEADERS += \widget.h
# Form文件
FORMS += \widget.ui

(2)ui文件

由UI设计器自动生成,存储了组件和布局

在这里插入图片描述

(3)主函数文件

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);		// 定义并创建应用程序Widget w;						// 定义并创建窗口w.show();						// 显示窗口return a.exec();				// 应用长须运行,开始消息循环和事件处理
}

(4)widget类

// 头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;	// ui_widget.h文件定义的类,外部声明
}class Widget : public QWidget
{Q_OBJECT 	// 宏,使用Qt信号与槽机制必须添加
public:explicit Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;	// Ui::Widget类型的一个指针,指向可视化界面
};
#endif // WIDGET_H
// 源文件
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);	// 实现了组件的各种设置、信号与槽的关联,即ui_widget.h文件中实现方法
}Widget::~Widget()
{delete ui;
}

(5)ui_widget.h文件

#ifndef UI_WIDGET_H
#define UI_WIDGET_H#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_Widget
{
public:QLabel *labDemo;QPushButton *bntClose;void setupUi(QWidget *Widget){	// 组件对象创建、信号和槽关联if (Widget->objectName().isEmpty())Widget->setObjectName(QString::fromUtf8("Widget"));Widget->resize(400, 300);labDemo = new QLabel(Widget);labDemo->setObjectName(QString::fromUtf8("labDemo"));labDemo->setGeometry(QRect(50, 90, 71, 41));QFont font;font.setPointSize(15);labDemo->setFont(font);bntClose = new QPushButton(Widget);bntClose->setObjectName(QString::fromUtf8("bntClose"));bntClose->setGeometry(QRect(310, 20, 75, 23));retranslateUi(Widget);QObject::connect(bntClose, SIGNAL(clicked()), Widget, SLOT(close()));QMetaObject::connectSlotsByName(Widget);} // setupUivoid retranslateUi(QWidget *Widget){Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));labDemo->setText(QCoreApplication::translate("Widget", "\346\265\213\350\257\225", nullptr));bntClose->setText(QCoreApplication::translate("Widget", "\345\205\263\351\227\255", nullptr));} // retranslateUi};namespace Ui {class Widget: public Ui_Widget {};	//widget类中指针的类型
} // namespace UiQT_END_NAMESPACE#endif // UI_WIDGET_H

二、可视化UI设计

实现一个程序实现:一个文本显示;三个复选框分别设置下划线、斜体、粗体;三个单选分别为红、绿、蓝三色;一个关闭按钮。

1、创建工程(基于QDialog,对话框)

2、添加组件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、添加信号和槽

(1)关闭按钮

在这里插入图片描述

(2)通过组件实现复选框槽函数功能

在这里插入图片描述
在这里插入图片描述

void Dialog::on_checkBoxUnderline_clicked(bool checked)
{QFont font = ui->plainTextEdit->font();font.setUnderline(checked);ui->plainTextEdit->setFont(font);
}void Dialog::on_checkBoxItalix_clicked(bool checked)
{QFont font = ui->plainTextEdit->font();font.setItalic(checked);ui->plainTextEdit->setFont(font);
}void Dialog::on_checkBoxBold_clicked(bool checked)
{QFont font = ui->plainTextEdit->font();font.setBold(checked);ui->plainTextEdit->setFont(font);
}

在这里插入图片描述

(3)添加自定义槽函数,关联信号

实现槽函数
void Dialog::setTextFontColor()
{QPalette plet = ui->plainTextEdit->palette();plet.setColor(QPalette::Text, Qt::black);if(ui->radioButtonRed->isChecked()){plet.setColor(QPalette::Text, Qt::red);}else if (ui->radioButtonGreen->isChecked()) {plet.setColor(QPalette::Text, Qt::green);}else if (ui->radioButtonBlue->isChecked()) {plet.setColor(QPalette::Text, Qt::blue);}ui->plainTextEdit->setPalette(plet);
}
关联槽函数和消息
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);QObject::connect(ui->radioButtonRed, SIGNAL(clicked()), this, SLOT(setTextFontColor()));QObject::connect(ui->radioButtonGreen, SIGNAL(clicked()), this, SLOT(setTextFontColor()));QObject::connect(ui->radioButtonBlue, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
}

三、代码化UI设计

1、创建工程

创建一个Widget Application项目:QDialog作为窗口基类,不勾选“Generate form”(中文:创建界面),即干部床减ui文件

在这里插入图片描述

2、在对话框类(dialog)中添加控件对象

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QCheckBox>        // 复选框
#include <QRadioButton>     // 单选框
#include <QPushButton>      // 按钮
#include <QPlainTextEdit>   // 文本编辑框class Dialog : public QDialog
{Q_OBJECTprivate:// 复选框QCheckBox *checkBoxUnderline;QCheckBox *checkBoxItalic;QCheckBox *checkBoxBold;// 单选框QRadioButton *rBtnRed;QRadioButton *rBtnGreen;QRadioButton *rBtnBlue;// 文本编辑框QPlainTextEdit *plainTextEdit;// 按钮QPushButton *btnOK;QPushButton *btnChancel;QPushButton *btnClose;public:Dialog(QWidget *parent = 0);~Dialog();
};#endif // DIALOG_H
#include "dialog.h"
#include <QHBoxLayout>
#include <QVBoxLayout>Dialog::Dialog(QWidget *parent): QDialog(parent)
{// 文本编辑框plainTextEdit = new QPlainTextEdit(tr("Hello World"));// 修改字体大小QFont font = plainTextEdit->font();font.setPointSize(28);plainTextEdit->setFont(font);// 设置内容plainTextEdit->setPlainText(tr("Hello World !!!"));// 水平布局QHBoxLayout *HLayoutPlainTextEdit = new QHBoxLayout;HLayoutPlainTextEdit->addWidget(plainTextEdit);// 复选框checkBoxUnderline = new QCheckBox(tr("下划线"));checkBoxItalic = new QCheckBox(tr("斜体"));checkBoxBold = new QCheckBox(tr("加粗"));// 水平布局QHBoxLayout *HLayoutCheckBox = new QHBoxLayout;HLayoutCheckBox->addWidget(checkBoxUnderline);HLayoutCheckBox->addWidget(checkBoxItalic);HLayoutCheckBox->addWidget(checkBoxBold);// 单选框rBtnRed = new QRadioButton(tr("红色"));rBtnGreen = new QRadioButton(tr("绿色"));rBtnBlue = new QRadioButton(tr("蓝色"));// 水平布局QHBoxLayout *HLayoutRadioButton = new QHBoxLayout;HLayoutRadioButton->addWidget(rBtnRed);HLayoutRadioButton->addWidget(rBtnGreen);HLayoutRadioButton->addWidget(rBtnBlue);// 按钮btnOK = new QPushButton(tr("确定"));btnChancel = new QPushButton(tr("取消"));btnClose = new QPushButton(tr("关闭"));QHBoxLayout *HLayoutPushButton = new QHBoxLayout;HLayoutPushButton->addStretch();    // 添加占位HLayoutPushButton->addWidget(btnOK);HLayoutPushButton->addWidget(btnChancel);HLayoutPushButton->addStretch();    // 添加占位HLayoutPushButton->addWidget(btnClose);HLayoutPushButton->addStretch();    // 添加占位// 垂直对其QVBoxLayout *VLayout = new QVBoxLayout;VLayout->addLayout(HLayoutPlainTextEdit);VLayout->addLayout(HLayoutCheckBox);VLayout->addLayout(HLayoutRadioButton);VLayout->addLayout(HLayoutPushButton);// 将控件提交给对话框setLayout(VLayout);}Dialog::~Dialog()
{}
所有控件已经出现在对话框中,且在拉伸对话框时,所有控件都等比缩放。

在这里插入图片描述

3、注册信号与槽

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QCheckBox>        // 复选框
#include <QRadioButton>     // 单选框
#include <QPushButton>      // 按钮
#include <QPlainTextEdit>   // 文本编辑框class Dialog : public QDialog
{Q_OBJECTprivate:// 复选框QCheckBox *checkBoxUnderline;QCheckBox *checkBoxItalic;QCheckBox *checkBoxBold;// 单选框QRadioButton *rBtnRed;QRadioButton *rBtnGreen;QRadioButton *rBtnBlue;// 文本编辑框QPlainTextEdit *plainTextEdit;// 按钮QPushButton *btnOK;QPushButton *btnChancel;QPushButton *btnClose;private:void initUI();void initSignalSolts();private slots:void on_checkUnderline(bool bChecked);void on_checkItalic(bool bChecked);void on_checkBold(bool bChecked);void on_setTextFontColor();public:Dialog(QWidget *parent = 0);~Dialog();
};#endif // DIALOG_H
#include "dialog.h"
#include <QHBoxLayout>
#include <QVBoxLayout>void Dialog::initUI()
{// 文本编辑框plainTextEdit = new QPlainTextEdit(tr("Hello World"));// 修改字体大小QFont font = plainTextEdit->font();font.setPointSize(28);plainTextEdit->setFont(font);// 设置内容plainTextEdit->setPlainText(tr("Hello World !!!"));// 水平布局QHBoxLayout *HLayoutPlainTextEdit = new QHBoxLayout;HLayoutPlainTextEdit->addWidget(plainTextEdit);// 复选框checkBoxUnderline = new QCheckBox(tr("下划线"));checkBoxItalic = new QCheckBox(tr("斜体"));checkBoxBold = new QCheckBox(tr("加粗"));// 水平布局QHBoxLayout *HLayoutCheckBox = new QHBoxLayout;HLayoutCheckBox->addWidget(checkBoxUnderline);HLayoutCheckBox->addWidget(checkBoxItalic);HLayoutCheckBox->addWidget(checkBoxBold);// 单选框rBtnRed = new QRadioButton(tr("红色"));rBtnGreen = new QRadioButton(tr("绿色"));rBtnBlue = new QRadioButton(tr("蓝色"));// 水平布局QHBoxLayout *HLayoutRadioButton = new QHBoxLayout;HLayoutRadioButton->addWidget(rBtnRed);HLayoutRadioButton->addWidget(rBtnGreen);HLayoutRadioButton->addWidget(rBtnBlue);// 按钮btnOK = new QPushButton(tr("确定"));btnChancel = new QPushButton(tr("取消"));btnClose = new QPushButton(tr("关闭"));QHBoxLayout *HLayoutPushButton = new QHBoxLayout;HLayoutPushButton->addStretch();    // 添加占位HLayoutPushButton->addWidget(btnOK);HLayoutPushButton->addWidget(btnChancel);HLayoutPushButton->addStretch();    // 添加占位HLayoutPushButton->addWidget(btnClose);HLayoutPushButton->addStretch();    // 添加占位// 垂直对其QVBoxLayout *VLayout = new QVBoxLayout;VLayout->addLayout(HLayoutPlainTextEdit);VLayout->addLayout(HLayoutCheckBox);VLayout->addLayout(HLayoutRadioButton);VLayout->addLayout(HLayoutPushButton);// 将控件提交给对话框setLayout(VLayout);
}void Dialog::initSignalSolts()
{// 注册按钮事件connect(btnOK, SIGNAL(clicked()), this, SLOT(accept()));connect(btnChancel, SIGNAL(clicked()), this, SLOT(reject()));connect(btnClose, SIGNAL(clicked()), this, SLOT(close()));// 注册复选框connect(checkBoxUnderline, SIGNAL(clicked(bool)), this, SLOT(on_checkUnderline(bool)));connect(checkBoxItalic, SIGNAL(clicked(bool)), this, SLOT(on_checkItalic(bool)));connect(checkBoxBold, SIGNAL(clicked(bool)), this, SLOT(on_checkBold(bool)));// 注册单选框connect(rBtnRed, SIGNAL(clicked()), this, SLOT(on_setTextFontColor()));connect(rBtnGreen, SIGNAL(clicked()), this, SLOT(on_setTextFontColor()));connect(rBtnBlue, SIGNAL(clicked()), this, SLOT(on_setTextFontColor()));
}void Dialog::on_checkUnderline(bool bChecked)
{QFont font = plainTextEdit->font();font.setUnderline(bChecked);plainTextEdit->setFont(font);
}void Dialog::on_checkItalic(bool bChecked)
{QFont font = plainTextEdit->font();font.setItalic(bChecked);plainTextEdit->setFont(font);
}void Dialog::on_checkBold(bool bChecked)
{QFont font = plainTextEdit->font();font.setBold(bChecked);plainTextEdit->setFont(font);
}void Dialog::on_setTextFontColor()
{QPalette plet = plainTextEdit->palette();plet.setColor(QPalette::Text, Qt::black);if(rBtnRed->isChecked()){plet.setColor(QPalette::Text, Qt::red);}else if (rBtnGreen->isChecked()) {plet.setColor(QPalette::Text, Qt::green);}else if (rBtnBlue->isChecked()) {plet.setColor(QPalette::Text, Qt::blue);}plainTextEdit->setPalette(plet);
}Dialog::Dialog(QWidget *parent): QDialog(parent)
{initUI();initSignalSolts();
}Dialog::~Dialog()
{}

在这里插入图片描述

四、混合方式UI设计

实现一个文本编辑器

在这里插入图片描述

1、创建基于QMainWindow的项目

2、添加资源文件

在这里插入图片描述
在这里插入图片描述
添加前缀
在这里插入图片描述
添加文件(添加前缀之后会出现)
在这里插入图片描述
在这里插入图片描述

3、添加工具栏

Action:可以创建菜单项,工具栏按钮

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加关闭信号和槽
在这里插入图片描述

4、设置文本框布局

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 将编辑框设置为中心布局setCentralWidget(ui->plainTextEdit);
}

在这里插入图片描述

5、工具栏和状态栏添加组件(代码编辑UI)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include <QProgressBar> // 进度条
#include <QLabel>       // 标签
#include <QSpinBox>     // 数值输入框
#include <QFontComboBox>    // 字体选择器namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTprivate:QLabel *fLabCurrFile;QProgressBar *progressBar;QSpinBox *spinFontSize;QFontComboBox *comboxFont;void initUI();public:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"void MainWindow::initUI()
{// 添加状态栏fLabCurrFile = new QLabel;fLabCurrFile->setMidLineWidth(150); //设置最小宽度fLabCurrFile->setText("当前文件:");ui->statusBar->addWidget(fLabCurrFile);// 进度条progressBar = new QProgressBar;progressBar->setMinimum(5); //设置最小值progressBar->setMaximum(50);    //设置最大值progressBar->setValue(ui->plainTextEdit->font().pointSize());   //设置当前值ui->statusBar->addWidget(progressBar);// 工具栏添加字体大小ui->mainToolBar->addWidget(new QLabel("字体大小"));spinFontSize = new QSpinBox;spinFontSize->setMinimum(5);spinFontSize->setMaximum(50);ui->mainToolBar->addWidget(spinFontSize);// 工具栏添加字体选择器ui->mainToolBar->addWidget(new QLabel("字体大小"));comboxFont = new QFontComboBox;ui->mainToolBar->addWidget(comboxFont);
}MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 将编辑框设置为中心布局initUI();setCentralWidget(ui->plainTextEdit);
}MainWindow::~MainWindow()
{delete ui;
}

在这里插入图片描述

6、添加剪切复制粘贴信号与槽

在这里插入图片描述

7、添加粗体、斜体、下划线的信号与槽

在这里插入图片描述

void MainWindow::on_actBold_triggered(bool checked)
{/*// 对整个组件生效QFont font = ui->plainTextEdit->font();font.setBold(checked);ui->plainTextEdit->setFont(font);*/// 单独对选中内容QTextCharFormat fmt;if(checked){fmt.setFontWeight(QFont::Bold);}else {fmt.setFontWeight(QFont::Normal);}ui->plainTextEdit->mergeCurrentCharFormat(fmt);
}void MainWindow::on_actItalic_triggered(bool checked)
{/*// 对整个组件生效QFont font = ui->plainTextEdit->font();font.setItalic(checked);ui->plainTextEdit->setFont(font);*/// 单独对选中内容QTextCharFormat fmt;fmt.setFontItalic(checked);ui->plainTextEdit->mergeCurrentCharFormat(fmt);
}void MainWindow::on_actUnderline_triggered(bool checked)
{/*// 对整个组件生效QFont font = ui->plainTextEdit->font();font.setUnderline(checked);ui->plainTextEdit->setFont(font);*/// 单独对选中内容QTextCharFormat fmt;fmt.setFontUnderline(checked);ui->plainTextEdit->mergeCurrentCharFormat(fmt);
}

在这里插入图片描述

8、添加:根据文本框内容选中修改工具栏状态

选中文本编辑框,右击选择转到槽。

在这里插入图片描述
选中selectionChanged。
在这里插入图片描述

void MainWindow::on_plainTextEdit_selectionChanged()
{QTextCharFormat fmt;fmt = ui->plainTextEdit->currentCharFormat();ui->actItalic->setChecked(fmt.fontItalic());ui->actBold->setChecked(fmt.font().bold());ui->actUnderline->setChecked(fmt.fontUnderline());
}

在这里插入图片描述
在这里插入图片描述

9、设置字体大小与字体

void MainWindow::initSignalSlots()
{connect(spinFontSize, SIGNAL(valueChanged(int)), this,SLOT(on_spinBoxFontSize_valueChanged(int)));connect(comboxFont, SIGNAL(currentIndexChanged(const QString&)), this,SLOT(on_comboxFont_currentIndexChanged(const QString&)));
}
void MainWindow::on_spinBoxFontSize_valueChanged(int nFontSize)
{QTextCharFormat fmt;fmt.setFontPointSize(nFontSize);ui->plainTextEdit->mergeCurrentCharFormat(fmt);progressBar->setValue(nFontSize);
}void MainWindow::on_comboxFont_currentIndexChanged(const QString &strIndex)
{QTextCharFormat fmt;fmt.setFontFamily(strIndex);ui->plainTextEdit->mergeCurrentCharFormat(fmt);
}

在这里插入图片描述

10、设置应用程序图标

工程文件添加配置项,工程目录添加图片文件。
RC_ICONS = AppIcon.ico

在这里插入图片描述

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

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

相关文章

metartc5_jz源码阅读-yang_push_h264_encodeVideo

//编码rtp的视频buffer&#xff0c;发送给p2p对端。 int32_t yang_push_h264_encodeVideo(YangRtcSession *session, YangPushH264Rtp *rtp,YangRtpPacket *pkt) {int err 0;//用videoRtpBuffer中的数据填充rtp->buf.yang_init_buffer(&rtp->buf, yang_get_rtpBuffe…

如何在CMakeLists.txt设置多线程编译加速

在windows cmake-gui 编译时候&#xff0c;没有像linux 一样有make -j 实现多线程编译 但是没有多线程编译速度会很慢&#xff0c;为了windows 编译程序时候实现多线程加速可以在 cmakelists.txt 添加下面两句就可以实现多线程编译 set( CMAKE_C_FLAGS "${CMAKE_C_FLA…

RabbitMQ消息可靠性保证机制3--消费端ACK机制

消费端ACK机制 ​ 在这之前已经完成了发送端的确认机制。可以保证数据成功的发送到RabbitMQ&#xff0c;以及持久化机制&#xff0c;然尔这依然无法完全保证整个过程的可靠性&#xff0c;因为如果消息被消费过程中业务处理失败了&#xff0c;但是消息却已经被标记为消费了&…

3.2.6 使用ROPES软件开发模型做设计、实现、测试

3.2.6 使用ROPES软件开发模型做设计 使用ROPES软件开发模型进行设计涉及将系统开发过程分为分析、设计和优化的不同阶段。 分析模型与设计模型 分析模型&#xff1a;定义系统所需的属性集合&#xff0c;它是理解和表述系统需求的第一步。它更注重于"应该做什么"而…

cygwin安装make工具

1. 下载安装包。 2. 运行setup-x86_64.exe 3. 选择安装源&#xff08;Mirror&#xff09;&#xff1a;在 Cygwin 安装程序的窗口中&#xff0c;选择 "Install from Internet" 选项&#xff0c;然后点击 "Next" 继续。 4. 选择安装目录&#xff1a;在 &q…

rk3588中编译带有ffmpeg的opencv

有朋友有工程需要&#xff0c;将视频写成mp4&#xff0c;当然最简单的方法当然是使用opencv的命令 cv::VideoWriter writer;bool bRet writer.open("./out.mp4", cv::VideoWriter::fourcc(m, p, 4, v), 15, cv::Size(640, 512), 1); 但是奈何很难编译成功&#xff…

Python | 基于Mediapipe框架的手势识别系统

一、项目要求 1、题目 本题着力于解决会商演示系统中的非接触式人机交互问题&#xff0c;具体而言&#xff0c;其核心问题就是通过计算机视觉技术实现对基于视频流的手势动作进行实时检测和识别。通过摄像头采集并识别控制者连续的手势动作&#xff0c;完成包括点击、平移、缩放…

离散数学1

注&#xff1a;线性代数已经更新了最大部分的内容&#xff0c;因此过段时间再补充剩余内容。 小王能歌善舞。因此&#xff0c;小王必须得会唱歌也必须得会跳舞&#xff0c;才满足题意 小王能唱歌或者小王能跳舞。因此&#xff0c;小王会唱歌也会跳舞满足。小王不会唱歌但会跳舞…

JavaScript常用事件演示

文章目录 一、在JavaScript中什么是事件&#xff1f;二、什么是JavaScript 常用事件&#xff1f;三、常用JS事件代码示例:四、事件总结 一、在JavaScript中什么是事件&#xff1f; JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个…

C++|【34】C++中的const

文章目录 constconst最基本的用法const和指针const和类 const const最基本的用法 用于限定a的大小&#xff0c;使a变成一个恒定不变的值。 应用场景&#xff1a;比如设置一些和标准相关的值&#xff0c;如上下限等等。 const和指针 指针总是包含两部分信息&#xff0c;一个是…

如何信任机器学习模型的预测结果?

在本篇中&#xff0c;我将通过一个例子演示在 MATLAB 如何使用 LIME 进行复杂机器学习模型预测结果的解释。 我使用数据集 carbig&#xff08;MATLAB 自带的数据集&#xff09;训练一个回归模型&#xff0c;用于预测汽车的燃油效率。数据集 carbig 是 70 年代到 80 年代生产的汽…

docker的基础知识

介绍docker 什么是docker Docker是一种开源的容器化平台&#xff0c;可以让开发人员将应用程序与其依赖的运行时环境一起打包到一个称为容器的独立单元中。这个容器可以在任何支持Docker的机器上运行&#xff0c;提供了一种快速和可移植的方式来部署应用程序。Docker的核心组件…

Python库学习(十四):ORM框架-SQLAlchemy

1.介绍 SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射&#xff08;ORM&#xff09;库。它允许开发者通过 Python 代码而不是 SQL查询语言来操作数据库。SQLAlchemy 提供了一种灵活且强大的方式来与关系型数据库交互&#xff0c;支持多种数据库后端&#xff0c;如 P…

spring oauth2 authorization server 配置源码解析

版本 1.2.1 源码 OAuth2 授权服务器配置 org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration Configuration(proxyBeanMethods false) public class OAuth2AuthorizationServerConfi…

【十七】【动态规划】DP41 【模板】01背包、416. 分割等和子集、494. 目标和,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

小米红米Note9 Pro 5G刷PixelOS,并安装kali nethunter

1.解锁BL 小米解锁BL&#xff0c;网上有很多教程&#xff0c;如果需要刷机的话&#xff0c;需要提前7天准备。因为小米解锁需要登录账号&#xff0c;并使用官方解锁工具进行解锁&#xff0c;这里不做过多阐述。 2.下载相关文件 可以访问该地址下载recovery和rom&#xff1a;…

GeoServer发布地图服务(WMS、WFS)

文章目录 1. 概述2. 矢量数据源3. 栅格数据源 1. 概述 我们知道将GIS数据大致分成矢量数据和栅格数据&#xff08;地形和三维模型都是兼具矢量和栅格数据的特性&#xff09;。但是如果用来Web环境中&#xff0c;那么使用图片这个栅格形式的数据载体无疑是最为方便的&#xff0…

一个奇怪的问题和奇怪的解决方案

背景 最近想学学OpenCV&#xff0c;先说说学习环境 软件&#xff1a;Python 3.11 Pycharm opencv、numpy、matplotlib硬件&#xff1a;家里台式机&#xff0c;单位笔记本代码放到github上&#xff0c;方便在两台机子之间同步笔记本用win11系统台式机原来安装了debian 12KDE…

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II 买卖股票的最佳时机 121. 买卖股票的最佳时机 文章讲解&#xff1a;https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C…

Vue中插槽的简单使用

插槽 分类&#xff1a;默认插槽、具名插槽、作用域插槽 默认插槽&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件通信的方式&#xff0c;适用于父组件&#xff08;App&#xff09;>子组件(MyFooter) 默认插槽的App组件 <template>&…