PyQt5事件机制解析:从原理到实战一网打尽!
PyQt5事件机制
- 一、简介
- 1.1 PyQt5的概述和作用
- 1.2 为什么学习PyQt5事件机制
- 1.2.1 实现用户交互
- 1.2.2 处理复杂逻辑
- 1.2.3 自定义用户界面行为
- 1.2.4 优化性能
- 二、PyQt5事件机制初步了解
- 2.1 PyQt5事件的概念和基本原理
- 2.1.1 PyQt5事件的概念
- 2.1.2 PyQt5事件的基本原理
- 2.2 事件处理的基本流程
- 2.2.1 事件的分发
- 2.2.2 事件的接收
- 2.2.3 事件的处理
- 2.3 事件处理器的注册和处理
- 2.3.1 事件处理器的注册
- 2.3.2 事件处理器的处理
- 三、PyQt5事件机制深入分析
- 3.1 了解PyQt5中的事件类型
- 3.2 事件过滤器的使用
- 3.3 事件的冒泡和捕获机制
- 四、PyQt5事件机制的实战演练
- 4.1 创建一个基本的PyQt5应用程序
- 4.2 实现一些常见的事件处理
- 4.3 演示事件过滤器的功能和使用方法
- 五、结语
- 5.1 总结PyQt5事件机制的重要性
- 5.2 可能的扩展和深入学习方向
一、简介
1.1 PyQt5的概述和作用
PyQt5是一个用于开发图形用户界面的Python库,它是基于Qt框架的Python绑定。Qt是一个跨平台的应用程序框架,为开发者提供了丰富的工具和组件,可以用于构建高效、漂亮和功能强大的GUI应用程序。PyQt5作为Qt的Python绑定,提供了完整的Qt功能,并能够与Python语言无缝集成。
PyQt5的主要作用是为开发者提供了丰富的GUI组件和工具,使开发者能够快速而简便地创建跨平台的图形用户界面应用程序。它支持主流的操作系统,包括Windows、Linux和macOS,并且可以与主要的Python版本兼容,如Python 2.7和Python 3.x。
1.2 为什么学习PyQt5事件机制
事件机制是PyQt5的核心概念之一,学习并掌握事件机制对于开发GUI应用程序至关重要。在PyQt5中,事件机制用于处理用户与应用程序之间的交互,例如鼠标点击、键盘输入等操作。了解事件机制的原理和使用方法,可以使开发者更好地理解和控制应用程序的行为,增强用户体验。
1.2.1 实现用户交互
在图形用户界面应用程序中,用户交互是非常重要的。通过了解和利用PyQt5的事件机制,开发者能够轻松响应用户的操作和输入,例如点击按钮、选择菜单项等。这可以使程序更加交互性,提升用户体验。
1.2.2 处理复杂逻辑
在一些应用程序中,可能需要处理复杂的逻辑和业务流程。PyQt5的事件机制可以帮助开发者将整个应用程序拆分为多个事件处理函数,使得代码结构更加清晰和易于维护。通过合理利用事件机制,可以将复杂的逻辑分解为多个独立的事件处理函数,提高代码的可读性和可维护性。
1.2.3 自定义用户界面行为
PyQt5的事件机制允许开发者自定义用户界面的行为。通过重写和扩展事件处理函数,可以对控件的默认行为进行修改,实现自定义的交互效果。这为开发者提供了很大的灵活性和创造空间。
1.2.4 优化性能
PyQt5的事件机制还可以帮助开发者优化应用程序的性能。通过合理地处理和过滤事件,可以避免不必要的计算和操作,提高应用程序的响应速度。此外,PyQt5还提供了信号和槽机制,可以将事件和信号关联起来,实现更加高效的事件处理。
二、PyQt5事件机制初步了解
PyQt5是Python的一个GUI工具包,它是使用C++编写的Qt GUI库的Python绑定。PyQt5提供了GUI开发所需的所有基础组件和事件处理机制,以及丰富的展示和交互特效等功能。
2.1 PyQt5事件的概念和基本原理
2.1.1 PyQt5事件的概念
PyQt5中的事件是指在程序运行过程中,由系统或用户所产生的某种动作或信号。例如鼠标点击、键盘按键、窗口大小改变等。当这些事件发生时,它们会被封装成事件对象,然后通过Qt的事件分发系统传递给相应的对象进行处理。
2.1.2 PyQt5事件的基本原理
PyQt5中的事件处理是基于信号和槽机制的。在Qt中,每个QObject派生的类都有信号和槽机制。一个QObject可能会发出一个信号,其他的QObject则会接收到这个信号,然后触发一些操作。这种机制的实现是基于Qt的元对象系统,它会自动为QObject派生的类创建一个元对象,在程序运行时,使用元对象系统来管理成员函数的调用。
2.2 事件处理的基本流程
PyQt5所使用的事件处理机制包括三个基本操作:事件的分发、事件的接收和事件的处理。
2.2.1 事件的分发
PyQt5中所有的事件都是由 QApplication 事件分发系统分发的。QApplication 继承自QCoreApplication,它负责在消息循环中处理各种事件。
2.2.2 事件的接收
当一个事件分发时,Qt在对象树中自上而下查找适合处理这个事件的对象,这个对象就是事件接收者。事件接收者的查找是根据事件传递构造的。在事件接收者中,Qt通过查找是否存在处理这个事件的槽函数,并将事件派遣到对应的槽函数中处理。
2.2.3 事件的处理
在事件接收者对象得到事件后,它会根据注册的事件处理器(槽函数)进行事件处理。事件处理是通过QObject的connect()语法实现的,该语法用于建立信号和槽之间的联系。例如:
btn = QPushButton("Click me")
btn.clicked.connect(self.btn_clicked)
上述代码建立了QPushButton类的clicked信号与相应的处理函数btn_clicked()之间的联系,当用户单击按钮时,就会检查是否与该信号相关联的槽函数存在,并调用信号所对应的槽函数进行事件处理。
2.3 事件处理器的注册和处理
事件处理器是用于处理特定事件的槽函数。当一个对象需要对某个事件进行处理时,需要对该对象进行事件处理器的注册。
2.3.1 事件处理器的注册
在PyQt5中,事件处理器的注册是通过 connect() 语法实现的。该语法用于建立信号和槽之间的联系。当一个事件发生时,会调用相应的信号,然后触发槽函数进行事件处理。
senderObject.signal.connect(receiverObject.slot)
其中 senderObject 是发送信号的对象,signal 是信号,receiverObject 是接收信号的对象,slot 是槽函数。例如:
btn = QPushButton("Click me")
btn.clicked.connect(self.btn_clicked)
上述代码将QPushButton类的clicked信号以及相应的处理函数btn_clicked()之间建立了联系。
2.3.2 事件处理器的处理
一旦发生某个事件并触发了槽函数,槽函数就会开始事件的处理过程。在事件处理器函数中,可以通过AI算法对事件进行具体的处理,包括计算、识别、分类等。
例如,判断按钮是否被单击:
def btn_clicked(self):if sender() == self.btn:print("Button clicked")
上述代码使用了sender()函数获取了发送信号的对象,然后判断是否与按钮相同,如果是,则输出“Button clicked”。
三、PyQt5事件机制深入分析
3.1 了解PyQt5中的事件类型
在PyQt5中,事件是指发生在应用程序中的各种动作,比如点击按钮、键盘输入等。PyQt5通过事件类型来定义不同的事件,这些事件类型包括鼠标点击事件、键盘按键事件、定时器事件等。了解不同事件类型的特点和使用方法对于开发PyQt5应用程序至关重要。
PyQt5中常见的事件类型包括:
- 鼠标事件:包括点击、双击、移动、滚轮等鼠标操作。
- 键盘事件:指用户在键盘上的按键操作,比如按下、释放等。
- 定时器事件:定时器事件是指在一定时间间隔触发的事件,常用于实现定时刷新等功能。
# 这里插入鼠标事件的示例代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtCore import Qtclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 280, 170)self.setWindowTitle('Event handler')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawPoints(qp)qp.end()def drawPoints(self, qp):qp.setPen(Qt.red)qp.drawPoint(100, 100)def mousePressEvent(self, e):self.update()app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3.2 事件过滤器的使用
PyQt5通过事件过滤器提供了一种灵活的方式来过滤和处理事件。事件过滤器允许开发者对特定的控件或应用程序全局事件进行拦截和处理,从而实现各种自定义的功能。
通过事件过滤器,可以实现诸如监控鼠标移动、自定义按键处理、事件拦截等功能。事件过滤器的使用为PyQt5应用程序的定制和功能扩展提供了可能性。
# 这里插入事件过滤器的示例代码
import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication)
from PyQt5.QtCore import QEventclass Button(QPushButton):def __init__(self, title, parent):super().__init__(title, parent)def event(self, event):if event.type() == QEvent.HoverEnter:print('鼠标悬停')return Truereturn super().event(event)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.button = Button('Button', self)self.button.move(50, 50)self.setGeometry(300, 300, 280, 170)self.setWindowTitle('Event filter')self.show()app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3.3 事件的冒泡和捕获机制
事件的冒泡和捕获机制是指事件在控件层级结构中的传递和处理方式。在PyQt5中,事件的传递顺序可以是从顶层控件向下层传递(捕获),也可以是从下层控件向顶层传递(冒泡)。
掌握事件的冒泡和捕获机制有助于有效地处理事件传递过程中的冲突和重复处理问题。通过深入了解事件的冒泡和捕获机制,开发者可以更加灵活地设计和组织控件,并实现复杂的交互功能。
四、PyQt5事件机制的实战演练
4.1 创建一个基本的PyQt5应用程序
在PyQt5中,事件处理是一个非常重要的部分,通过事件处理能够响应用户输入和操作,为了演示PyQt5事件机制的实际应用,我们首先来创建一个基本的PyQt5应用程序。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButtonclass BasicApp(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('PyQt5基础应用')self.setGeometry(100, 100, 400, 300)btn = QPushButton('点击我', self)btn.clicked.connect(self.buttonClicked)def buttonClicked(self):print('按钮被点击了')if __name__ == '__main__':app = QApplication(sys.argv)window = BasicApp()window.show()sys.exit(app.exec_())
在上述代码中,我们创建了一个基本的PyQt5应用程序,包括了一个窗口和一个按钮,演示了如何创建窗口和按钮,并且实现了按钮的点击事件。
4.2 实现一些常见的事件处理
PyQt5提供了丰富的事件处理方法,比如鼠标点击事件、键盘输入事件等等。下面我们来实现一些常见的事件处理,以便更好地理解PyQt5的事件机制。
# 实现鼠标点击事件处理
def mousePressEvent(self, event):print('鼠标被点击了')# 实现键盘输入事件处理
def keyPressEvent(self, event):if event.key() == Qt.Key_Escape:self.close()
在上述代码中,我们实现了鼠标点击事件处理和键盘输入事件处理,通过重写对应的方法来进行事件处理。
4.3 演示事件过滤器的功能和使用方法
除了直接重写事件处理方法,PyQt5还提供了事件过滤器的功能,可以通过事件过滤器来对事件进行过滤和修改,下面我们来演示事件过滤器的功能和使用方法。
# 演示事件过滤器的功能和使用方法
class EventFilterApp(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('事件过滤器演示')self.setGeometry(100, 100, 400, 300)self.installEventFilter(self)def eventFilter(self, obj, event):if event.type() == QEvent.MouseButtonPress:print('过滤器捕获了鼠标按下事件')return True # 表示事件已经被过滤器处理return False
在上述代码中,我们创建了一个新的窗口并安装了事件过滤器,通过重写eventFilter
方法来实现自定义的事件过滤逻辑。
五、结语
在本篇博客中,我们对PyQt5事件机制进行了一次全面的分析和讲解。通过对事件机制的原理分析和实战演练,我们深入了解了事件机制的重要性和工作原理。在学习和开发PyQt5应用程序时,事件机制常常是不可或缺的一部分,它可以帮助我们实现应用程序的各种交互效果,也可以帮助我们管理程序的运行状态。因此,深入了解和掌握PyQt5事件机制对于我们的开发工作是非常有益的。
5.1 总结PyQt5事件机制的重要性
PyQt5事件机制是PyQt5框架中非常重要的一部分,它是程序响应用户操作的重要机制。通过事件机制,我们可以实现程序的不同交互效果,例如,通过鼠标事件或键盘事件来捕获用户的操作,通过定时器事件来实现定时任务的执行等。同时,PyQt5事件机制还可以帮助我们管理程序的运行状态,例如,在程序运行过程中,我们可以通过事件机制监测网络状态或文件状态的变化,从而做出相应的处理。
除此之外,PyQt5事件机制还可以帮助我们实现程序的非阻塞运行。在GUI编程中,通常需要在主线程中处理用户的输入事件,但同时,我们还需要保证程序的其它部分也能够及时响应,例如,定时器的执行或后台任务的处理。通过PyQt5事件机制,我们可以很容易地实现多线程或协程模式,从而提高程序的运行效率和响应能力。
总之,PyQt5事件机制是PyQt5框架中一个非常重要的部分,无论是对于GUI编程还是非阻塞程序的编写,都是一个不可或缺的工具。
5.2 可能的扩展和深入学习方向
对于PyQt5事件机制的深入学习和扩展,本篇博客中只是一个起点。在实际的项目开发中,我们还需要更加深入地理解事件机制的原理和应用,才能更好地运用它来解决实际问题。以下是一些可能的扩展和深入学习方向:
- 事件过滤器的使用:PyQt5中的事件过滤器可以帮助我们拦截和处理指定对象的事件,从而在不修改原有代码的情况下,实现相应的功能。
- 自定义事件的实现:在一些场合下,我们可能需要自定义一些事件类型,以实现某些特殊的交互效果。在PyQt5中,可以通过继承QObject和定义事件类型来实现自定义事件。
- 异步编程和协程模式:异步编程和协程模式可以帮助我们实现更快速和响应的程序,并且可以更好地利用多核处理器的性能。在PyQt5中,可以通过QThread和asyncio等来实现异步编程和协程模式。
- 跨平台开发和封装:PyQt5是一个跨平台的GUI开发框架,可以帮助我们实现多平台的程序开发。在实际开发中,我们可能需要考虑平台差异和库的封装问题,以便更好地复用代码和降低开发成本。
总之,PyQt5事件机制是一个广泛应用的工具,在不同的应用场合下,可以实现不同的功能和效果。通过对事件机制的深入学习和扩展,我们可以更好地实现应用程序的开发和优化。
感谢您阅读本文,您的鼓励将是我最大的动力。在编写本篇博客的过程中,我深深地感受到了对PyQt5事件机制的热爱和执着。希望通过这篇博客,您能对PyQt5事件机制有更深入的了解,也希望能给您在日常的开发工作中带来一些启发和帮助。
相关文章:
PyQt5事件机制解析:从原理到实战一网打尽!
PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…...
GraphQL与RESTful API的区别和优势
GraphQL GraphQL是一种用于API设计的语言和查询协议,由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段,而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中,客户端发送一个单一的请求,而服务器返…...
关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
【HarmonyOS NEXT】鸿蒙Socket 连接
简介 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP:传输控制协议(Transmission Control Proto…...

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发 ),系统具有完整的源代码和…...
【vue】实现自动轮播+滚轮控制
前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...

鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”
随着数字经济时代的到来,数据已成为最有价值的生产要素,是企业的重要资产之一。随着数据流动性的增强,数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业,面临着如何在保障数据安全的同时&#…...

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活
在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说,有时候需要在自己的电脑上安装 Windows 操作系统,以体验更多软件及功能,而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类
学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninsta…...

【Python】变量与基本数据类型
个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言变量声明变量变量的命名规则 变量赋值多个变量赋值 标准数据类型变量的使用方式存储和访问数据:参与逻辑运算和数学运算在函数间传递数据构建复杂的数据结构 NameE…...
Unity按键表大全
Unity键值对应表# KeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键,以下是键值对应列表: 常用键# Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 小键盘# …...
第一周java。2
方法的作用 将重复的代码包装起来,写成方法,提高代码的复用性。 方法的语法 方法的语法格式如下 : [修饰符] 方法返回值类型 方法名(形参列表) { //由零条到多条可执行性语句组成的方法体return 返回值; } 定义方法语法格式的详细说明如下…...

Arduino - Keypad 键盘
Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中,我们将学习: How to use key…...

国产芯片方案/蓝牙咖啡电子秤方案研发
咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能,工作电压在2.4V~3.6V之间,满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示,分别为:g、lb、oz、…...

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用
react18 中使用reduxjs/toolkit 1.安装依赖包 yarn add reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹,然后创建 index.js 文件。 import { configureStore } from "reduxjs/toolkit"; import { counterReducer } from "…...

剧本杀小程序:助力商家发展,提高游戏体验
近几年,剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比,剧本杀游戏具有强大的社交性,玩家在游戏中既可以推理玩游戏,也可以与其他玩家交流互动,提高玩家的游戏体验感。 随着互联网的发展…...

pikachu靶场 利用Rce上传一句话木马案例(工具:中国蚁剑)
目录 一、准备靶场,进入RCE 二、测试写入文件 三、使用中国蚁剑 一、准备靶场,进入RCE 我这里用的是pikachu 打开pikachu靶场,选择 RCE > exec "ping" 测试是否存在 Rce 漏洞 因为我们猜测在这个 ping 功能是直接调用系统…...

CenterOS7安装java
CenterOS7安装java #进入安装目录 cd /usr/local/soft/java#wget下载java8 #直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了 #不时间的下载链接不一样 wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c9…...
react 重新加载子组件
在React中,要重新加载某个子组件,你可以通过改变该组件的key属性来强制它重新渲染。这是因为React会在key变化时销毁旧的组件实例并创建一个新的实例。 多的不说直接上代码 import React, { useState } from react; import ChildComponent from ../chil…...

从零开始使用WordPress搭建个人网站并一键发布公网详细教程
文章目录 前言1. 搭建网站:安装WordPress2. 搭建网站:创建WordPress数据库3. 搭建网站:安装相对URL插件4. 搭建网站:内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 固定WordPress公网地址5.1. 固定地…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...