(二)QT——按钮小程序
目录
前言
按钮小程序
1、步骤
2、代码示例
3、多个按钮
①信号与槽的一对一
②多对一(多个信号连接到同一个槽)
③一对多(一个信号连接到多个槽)
结论
前言
按钮小程序
Qt 按钮程序通常包含 三个核心文件:
mainwindow.h
:主窗口类的声明(定义按钮和槽函数)。mainwindow.cpp
:主窗口类的实现(创建按钮并连接信号与槽)。main.cpp
:程序入口(运行主窗口)。
在 Qt 中,创建一个简单的按钮小程序(GUI 程序)通常涉及使用 Qt Widgets 库来创建窗口和按钮,并处理按钮的点击事件。以下是一个基础的 Qt 小程序示例,展示如何创建一个带按钮的窗口:
1、步骤
- 创建项目:使用 Qt Creator 创建一个 Qt Widgets Application 项目。
- 设计界面:在
MainWindow
窗口中添加一个按钮。 - 处理事件:连接按钮的点击信号到槽函数,显示消息或者执行其他操作。
2、代码示例
1. mainwindow.ui
(界面设计)
- 打开 Qt Creator 中的
mainwindow.ui
文件,拖拽一个按钮(QPushButton
)到窗口中。
2. mainwindow.cpp
(功能实现)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置按钮文本ui->pushButton->setText("点击我");// 连接按钮点击信号到槽函数connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮点击槽函数
void MainWindow::onButtonClicked()
{// 弹出一个消息框QMessageBox::information(this, "提示", "苦瓜汤补钙!");
}
3. mainwindow.ui
(界面设计)
在 Qt Creator 中使用拖放工具添加一个按钮,并确保按钮的 objectName
是 pushButton
,然后连接信号和槽。
4. mainwindow.h
(头文件)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButtonClicked(); // 按钮点击的槽函数private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
解释:
- UI 文件:通过 Qt Creator 的设计器,我们可以直观地设计界面。按钮被命名为
pushButton
,并通过信号与槽机制连接点击事件。 - 槽函数:当按钮被点击时,
onButtonClicked
槽函数会被触发,弹出一个消息框 (QMessageBox::information
) 来显示提示信息。
构建与运行:
- 在 Qt Creator 中点击 编译 (
Ctrl + B
),然后点击 运行 (Ctrl + R
)。 - 当窗口显示时,点击按钮会弹出消息框。
这就是一个简单的 Qt 按钮小程序。你可以根据需要修改按钮的行为和界面元素,Qt 提供了丰富的控件和功能,可以帮助你开发各种应用。
3、多个按钮
如果你的 Qt 小程序包含 多个按钮,你可以使用 多个槽函数 或者 使用 QObject::sender()
识别信号发送者 来动态处理多个按钮的点击事件。
注意:Qt的信号与槽机制,可以实现信号与槽的一对一、多对一和一对多。
①信号与槽的一对一
方法 1:为每个按钮创建独立的槽函数
如果每个按钮有不同的功能,你可以分别为它们创建槽函数。
修改 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButton1Clicked();void onButton2Clicked();void onButton3Clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
修改 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置按钮文本ui->pushButton->setText("按钮 1");ui->pushButton_2->setText("按钮 2");ui->pushButton_3->setText("按钮 3");// 连接信号与槽connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);connect(ui->pushButton_2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);connect(ui->pushButton_3, &QPushButton::clicked, this, &MainWindow::onButton3Clicked);
}MainWindow::~MainWindow()
{delete ui;
}// 定义槽函数
void MainWindow::onButton1Clicked()
{QMessageBox::information(this, "提示", "按钮 1 被点击!");
}void MainWindow::onButton2Clicked()
{QMessageBox::information(this, "提示", "按钮 2 被点击!");
}void MainWindow::onButton3Clicked()
{QMessageBox::information(this, "提示", "按钮 3 被点击!");
}
优点: 代码清晰,每个按钮的逻辑独立。
缺点: 如果按钮很多,代码会变得冗余。
方法 2:手动创建按钮
修改 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButton1Clicked(); // 按钮1的槽函数void onButton2Clicked(); // 按钮2的槽函数private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
修改 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮 1QPushButton *pushButton1 = new QPushButton("按钮 1", this);pushButton1->setGeometry(50, 50, 100, 30);// 创建按钮 2QPushButton *pushButton2 = new QPushButton("按钮 2", this);pushButton2->setGeometry(50, 100, 100, 30);// 连接信号与槽connect(pushButton1, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);connect(pushButton2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮 1 处理函数
void MainWindow::onButton1Clicked()
{qDebug() << "按钮 1 被点击";
}// 按钮 2 处理函数
void MainWindow::onButton2Clicked()
{qDebug() << "按钮 2 被点击";
}
运行步骤
- 在 Qt Creator 中创建 Qt Widgets 应用程序
- 替换
mainwindow.h
、mainwindow.cpp
和main.cpp
- 点击
Ctrl + R
运行 - 点击按钮,观察
Application Output
窗口:
修改 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMessageBox> // 添加 QMessageBox 头文件
#include <QPushButton> // 添加 QPushButton 头文件QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButton1Clicked(); // 按钮 1 槽函数void onButton2Clicked(); // 按钮 2 槽函数void onButton3Clicked(); // 按钮 3 槽函数private:Ui::MainWindow *ui;QPushButton *pushButton1;QPushButton *pushButton2;QPushButton *pushButton3;
};
#endif // MAINWINDOW_H
修改 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮 1pushButton1 = new QPushButton("按钮 1", this);pushButton1->setGeometry(50, 50, 150, 40);// 创建按钮 2pushButton2 = new QPushButton("按钮 2", this);pushButton2->setGeometry(50, 120, 150, 40);// 创建按钮 3pushButton3 = new QPushButton("按钮 3", this);pushButton3->setGeometry(50, 190, 150, 40);// 连接按钮信号到槽函数connect(pushButton1, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);connect(pushButton2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);connect(pushButton3, &QPushButton::clicked, this, &MainWindow::onButton3Clicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮 1 槽函数
void MainWindow::onButton1Clicked()
{QMessageBox::information(this, "提示", "按钮 1 被点击!");
}// 按钮 2 槽函数
void MainWindow::onButton2Clicked()
{QMessageBox::information(this, "提示", "按钮 2 被点击!");
}// 按钮 3 槽函数
void MainWindow::onButton3Clicked()
{QMessageBox::information(this, "提示", "按钮 3 被点击!");
}
②多对一(多个信号连接到同一个槽)
场景:多个按钮触发同一个槽函数
多个 QPushButton
连接到同一个 clicked()
槽函数,槽函数可以区分是哪个按钮触发的。
QtButtonApp/
│── main.cpp
│── mainwindow.h
│── mainwindow.cpp
│── mainwindow.ui (如果使用 UI 设计)
│── QtButtonApp.pro
- 使用
QSignalMapper
(Qt5 可用)或lambda
表达式(推荐 Qt6):- 让多个按钮的
clicked()
信号映射到同一个槽函数,并传递不同的参数。
- 让多个按钮的
sender()
自动识别哪个按钮触发:- 通过
QObject::sender()
获取信号来源(触发的按钮)。 - 获取按钮
text()
或者objectName()
来区分。
- 通过
修改 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QMap> // 用于存储按钮QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onAnyButtonClicked(); // ✅ 多对一的槽函数private:Ui::MainWindow *ui;QMap<QPushButton*, QString> buttonMap; // 按钮映射(用于存储按钮和它们的名称)
};
#endif // MAINWINDOW_H
修改 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// ✅ 统一创建多个按钮,并存入 QMap 进行管理QStringList buttonNames = {"按钮 1", "按钮 2", "按钮 3"};int y = 50;for (const QString &name : buttonNames) {QPushButton *button = new QPushButton(name, this);button->setGeometry(50, y, 100, 40); // 设置按钮位置y += 50;buttonMap[button] = name; // 记录按钮和它的名称// ✅ 连接所有按钮到**同一个槽函数**(多对一)connect(button, &QPushButton::clicked, this, &MainWindow::onAnyButtonClicked);}
}MainWindow::~MainWindow()
{delete ui;
}// ✅ **多对一的槽函数**
void MainWindow::onAnyButtonClicked()
{QPushButton *button = qobject_cast<QPushButton*>(sender()); // 获取触发的按钮if (button && buttonMap.contains(button)){QMessageBox::information(this, "按钮点击", buttonMap[button] + " kgtbg!");}
}
③一对多(一个信号连接到多个槽)
"一对多" 是指 一个信号 连接到多个 槽函数,而不是多个信号连接到一个槽函数。在 Qt 中可以轻松实现这种一对多的机制
- 创建一个信号,并连接到多个槽函数。
- 每个槽函数根据需要处理这个信号。
修改 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onSlot1();void onSlot2();void onSlot3();private:Ui::MainWindow *ui;QPushButton *button;
};
#endif // MAINWINDOW_H
修改 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮button = new QPushButton("点击按钮", this);button->setGeometry(50, 50, 120, 40);// 直接连接按钮的 clicked 信号到多个槽函数connect(button, &QPushButton::clicked, this, &MainWindow::onSlot1);connect(button, &QPushButton::clicked, this, &MainWindow::onSlot2);connect(button, &QPushButton::clicked, this, &MainWindow::onSlot3);
}MainWindow::~MainWindow()
{delete ui;
}// 槽1
void MainWindow::onSlot1()
{QMessageBox::information(this, "槽1", "槽1 被触发!");
}// 槽2
void MainWindow::onSlot2()
{QMessageBox::information(this, "槽2", "槽2 被触发!");
}// 槽3
void MainWindow::onSlot3()
{QMessageBox::information(this, "槽3", "槽3 被触发!");
}
如果你想 点击按钮后一次性显示多个信息框,可以用 QMessageBox::information()
直接串联多个调用,也可以用 QMessageBox
的 exec()
方法让多个消息框同时显示。
方式 1:使用 QMessageBox::information()
串联
一次性弹出多个消息框(但用户需要手动关闭每个消息框)
void MainWindow::onButtonClicked()
{QMessageBox::information(this, "提示", "槽1 被触发!");QMessageBox::information(this, "提示", "槽2 被触发!");QMessageBox::information(this, "提示", "槽3 被触发!");
}
这种方式需要逐个点击“确定”关闭消息框,才能显示下一个。
方式 2:使用 QMessageBox
并行显示多个对话框
一次性显示多个信息框,不用逐个关闭
void MainWindow::onButtonClicked()
{QMessageBox *msgBox1 = new QMessageBox(QMessageBox::Information, "提示", "槽1 被触发!", QMessageBox::Ok, this);QMessageBox *msgBox2 = new QMessageBox(QMessageBox::Information, "提示", "槽2 被触发!", QMessageBox::Ok, this);QMessageBox *msgBox3 = new QMessageBox(QMessageBox::Information, "提示", "槽3 被触发!", QMessageBox::Ok, this);msgBox1->show();msgBox2->show();msgBox3->show();
}
这样可以同时显示多个消息框,用户可以自由关闭,不需要等待一个一个弹出。
方式 3:在一个窗口显示所有信息
如果你不想弹出多个窗口,而是在一个窗口内显示所有信息:
void MainWindow::onButtonClicked()
{QString message = "槽1 被触发!\n槽2 被触发!\n槽3 被触发!";QMessageBox::information(this, "提示", message);
}
下面是一个 完整的 Qt 按钮小程序,包含 一个按钮,点击后会 一次性显示多个信息(方式 3)。
- 创建 Qt 项目(Qt Widgets Application)。
- 复制粘贴
mainwindow.h
、mainwindow.cpp
和main.cpp
代码。- 编译运行,点击按钮即可看到 一个弹窗 显示多个信息。
修改 mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButtonClicked(); // 按钮点击槽函数private:Ui::MainWindow *ui;QPushButton *button; // 按钮指针
};
#endif // MAINWINDOW_H
修改 mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮button = new QPushButton("点击我", this);button->setGeometry(100, 100, 100, 50); // 设定按钮位置// 连接信号和槽connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮点击事件
void MainWindow::onButtonClicked()
{// 方式 3:一次性显示多个信息QString message = "槽1 被触发!\n槽2 被触发!\n槽3 被触发!";QMessageBox::information(this, "提示", message);
}
这样不会弹出多个窗口,体验更好!
结论
✅ Qt 按钮程序主要使用 QPushButton
和信号槽机制
✅ 支持一对一、多对一和一对多的信号槽连接
✅ 可以创建多个按钮,并让它们共享同一个槽
✅ 可以让一个按钮触发多个槽,执行多个操作
🚀 Qt 的按钮程序灵活且强大,适用于多种 GUI 应用场景!
相关文章:

(二)QT——按钮小程序
目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一(多个信号连接到同一个槽) ③一对多(一个信号连接到多个槽) 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件: m…...

【Linux】从硬件到软件了解进程
个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程(1)简述(2)系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…...

HTB:Alert[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用ffuf对alert.htb域名进行子域名FUZZ 使用go…...

ARM嵌入式学习--第十天(UART)
--UART介绍 UART(Universal Asynchonous Receiver and Transmitter)通用异步接收器,是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控…...

玉米苗和杂草识别分割数据集labelme格式1997张3类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):1997 标注数量(json文件个数):1997 标注类别数:3 标注类别名称:["corn","weed","Bean…...

哈夫曼树
哈夫曼树(Huffman Tree)是一种最优的二叉树,常用于数据压缩,如在 Huffman 编码中使用。它是根据字符出现的频率来构造的,频率越高的字符越靠近树的根,频率低的字符则在较深的节点上。其核心思想是通过构建一…...

wax到底是什么意思
在很久很久以前,人类还没有诞生文字之前,人类就产生了语言;在诞生文字之前,人类就已经使用了语言很久很久。 没有文字之前,人们的语言其实是相对比较简单的,因为人类的生产和生活水平非常低下,…...

笔记:使用ST-LINK烧录STM32程序怎么样最方便?
一般板子在插件上, 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件:ST-LINK Utility,Keil_5; ST_Link 接口针脚定义: 按定义连接ST_Link与电路板; 打开STM32 ST-LINK Uti…...

数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)
一、数据集 二、导入数据 三、K-Means聚类 数据说明:提供一组数据,含体重、胆固醇、性别。 分析目标:找到这组数据中需要治疗的群体供后续使用。 一、数据集 点击下载数据集 二、导入数据 三、K-Means聚类 Ending, congratulations, youre done....

Python在数据科学领域的深度应用:从数据处理到机器学习模型构建
Python在数据科学领域的深度应用:从数据处理到机器学习模型构建 在当今大数据与人工智能蓬勃发展的时代,Python凭借其简洁的语法、强大的库支持和活跃的社区,已成为数据科学家和工程师的首选编程语言。本文将深入探讨Python在数据科学领域的应用,从数据预处理、探索性分析…...

海外问卷调查渠道查,具体运营的秘密
相信只要持之以恒并逐渐掌握技巧,每一位调查人在踏上征徐之时都会非常顺利的。并在日后的职业生涯中拥有捉刀厮杀的基本技能!本文会告诉你如何做好一个优秀的海外问卷调查人。 在市场经济高速发展的今天,众多的企业为了自身的生存和发展而在…...

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>单词搜索
题解如下 题目:解析决策树:代码设计: 代码: 题目: 解析 决策树: 代码设计: 代码: class Solution {private boolean[][] visit;//标记使用过的数据int m,n;//行,列char…...

万字长文深入浅出负载均衡器
前言 本篇博客主要分享Load Balancing(负载均衡),将从以下方面循序渐进地全面展开阐述: 介绍什么是负载均衡介绍常见的负载均衡算法 负载均衡简介 初识负载均衡 负载均衡是系统设计中的一个关键组成部分,它有助于…...

基于SpringBoot的青年公寓服务平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

经典游戏红色警戒2之英语
1. New construction options 部署新的建筑物(一般是部署基地车时说的)。 2. Loading 等待。(正在进行) 3. Construction complete 建筑完成。 4. On hold 等待。(暂停进行) 5. Canceled 取消。 6. Ca…...

IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统
IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…...

QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI?
问题提出 QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI? ABI(Application Binary Interface)介绍 ABI(Application Binary Interface,应用二进制接口)是指应用程序与操作系统或其他程序…...

处理 **5万字(约7.5万-10万token,中文1字≈1.5-2token)** 的上下文
处理 5万字(约7.5万-10万token,中文1字≈1.5-2token) 的上下文,对模型的长文本处理能力和显存要求较高。以下是不同规模模型的适用性分析及推荐: 一、模型规模与上下文能力的关系 模型类型参数量最大上下文长度&#…...

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…...

springboot 启动原理
目标: SpringBootApplication注解认识了解SpringBoot的启动流程 了解SpringFactoriesLoader对META-INF/spring.factories的反射加载认识AutoConfigurationImportSelector这个ImportSelector starter的认识和使用 目录 SpringBoot 启动原理SpringBootApplication 注…...

浅析DDOS攻击及防御策略
DDoS(分布式拒绝服务)攻击是一种通过大量计算机或网络僵尸主机对目标服务器发起大量无效或高流量请求,耗尽其资源,从而导致服务中断的网络攻击方式。这种攻击方式利用了分布式系统的特性,使攻击规模更大、影响范围更广…...

Linux网络 HTTPS 协议原理
概念 HTTPS 也是一个应用层协议,不过 是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP的内容是明文传输的,明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的…...

Idea插件开发
相关操作 执行插件 导出插件 然后到 /build/distributions 目录下面去找...

Java 有很多常用的库
1. 常用工具类库 Apache Commons:提供了大量常用的工具类,如: commons-lang3:字符串、数字、日期等常用工具类。commons-io:IO 操作,文件读写、流处理等。commons-collections4:集合类扩展。 G…...

pytorch实现文本摘要
人工智能例子汇总:AI常见的算法和例子-CSDN博客 import numpy as npfrom modelscope.hub.snapshot_download import snapshot_download from transformers import BertTokenizer, BertModel import torch# 下载模型到本地目录 model_dir snapshot_download(tians…...

C++基础day1
前言:谢谢阿秀,指路阿秀的学习笔记 一、基础语法 1.构造和析构: 类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。 构造顺序:父类->子类 析…...

从TinyZero的数据与源码来理解DeepSeek-R1-Zero的强化学习训练过程
1. 引入 TinyZero(参考1)是伯克利的博士生复现DeepSeek-R1-Zero的代码参仓库,他使用veRL来运行RL强化学习方法,对qwen2.5的0.5B、1.5B、3B等模型进行训练,在一个数字游戏数据集上,达到了较好的推理效果。 …...

爬虫基础(四)线程 和 进程 及相关知识点
目录 一、线程和进程 (1)进程 (2)线程 (3)区别 二、串行、并发、并行 (1)串行 (2)并行 (3)并发 三、爬虫中的线程和进程 &am…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01
1、开发背景 大家都很熟悉,Oracle提供了Impdp和ExpDp工具,功能很强大,可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具,在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…...

队列—学习
1. 手写队列的实现 使用数组实现队列是一种常见的方法。队列的基本操作包括入队(enqueue)和出队(dequeue)。队列的头部和尾部分别用 head 和 tail 指针表示。 代码实现 const int N 10000; // 定义队列容量,确保够…...