当前位置: 首页 > news >正文

PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)

目录

  • 专栏导读
  • 1、库的介绍
    • PyQt6的主要特点包括:
    • 使用PyQt6开发应用程序的一般步骤:
    • 库的安装
  • 2、设计窗口
    • 设计列表视图
    • 设计输入框控件与按钮
    • 设计布局
    • listView的简单样式
    • 增删查改函数
  • 完整代码
  • 总结

专栏导读

请添加图片描述

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

1、库的介绍

  • PyQt6是一个创建图形用户界面应用程序的工具包,它是Qt6的Python绑定。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛用于开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。PyQt6使得Python程序员能够利用Qt的强大功能,轻松创建具有丰富功能和美观界面的应用程序。

PyQt6的主要特点包括:

  • 跨平台:可以在Windows、Linux、macOS等操作系统上运行。
  • 丰富的控件:提供了大量的控件(如按钮、标签、文本框等),方便开发者使用。
  • 强大的布局管理:提供了多种布局管理器,可以方便地对控件进行布局。
  • 事件处理:支持各种事件处理,如鼠标点击、键盘输入等。
  • 丰富的API:提供了大量的API,可以方便地进行各种开发操作。
  • 与Qt6的紧密集成:作为Qt6的Python绑定,PyQt6可以访问Qt6的所有功能。

使用PyQt6开发应用程序的一般步骤:

  • 安装PyQt6:可以通过pip安装PyQt6。
  • 导入必要的模块:从PyQt6.QtWidgets模块中导入应用程序、窗口等类。
  • 创建应用程序和窗口:创建一个QApplication对象和一个窗口对象。
  • 设置窗口:设置窗口的标题、大小等属性。
  • 添加控件:在窗口中添加各种控件,如按钮、文本框等。
  • 设置布局:使用布局管理器对控件进行布局。
  • 显示窗口:调用窗口的show()方法显示窗口。
  • 运行应用程序:调用QApplication对象的exec()方法运行应用程序。

库的安装

pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple/

2、设计窗口

调用父类的初始化方法
设置窗口标题
设置窗口的初始大小
# 导入必要的PyQt6模块  
import sys  
from PyQt6.QtGui import QStandardItemModel, QStandardItem  
from PyQt6.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication, QHBoxLayout, QListView, QLineEdit  
# 定义一个继承自QWidget的类,用于构建我们的GUI  
class MyWidget(QWidget):  def __init__(self, parent=None):  super(MyWidget, self).__init__(parent)  # 调用父类的初始化方法  self.setWindowTitle("简易PyQt6-GUI界面实现列表的增删查改")  # 设置窗口标题  self.resize(500,350)  # 设置窗口的初始大小  

设计列表视图

初始化一个列表
创建一个4行1列的标准数据模型,用于管理列表视图的数据
遍历数据模型的行数,将self.list中的数据设置为数据模型的项
创建QListView控件,并设置其模型为上面创建的数据模型
# 初始化一个列表,用于存储将要显示在QListView中的数据  
self.list = ['奥运', '巴黎', '夺冠', '奥运健儿']  # 创建一个4行1列的标准数据模型,用于管理列表视图的数据  
self.mode = QStandardItemModel(4, 1)  # 遍历数据模型的行数,将self.list中的数据设置为数据模型的项  
for i in range(self.mode.rowCount()):  item = QStandardItem(self.list[i])  self.mode.setItem(i, 0, item)  # 向数据模型中再插入一行数据  
self.mode.insertRow(4, QStandardItem("大家好")) # 向数据模型中再插入一行数据  
self.mode.insertRow(4, QStandardItem("大家好"))  # 创建QListView控件,并设置其模型为上面创建的数据模型  
self.listView = QListView()  
self.listView.setModel(self.mode)  

设计输入框控件与按钮

文本输入框:QLineEdit()
按钮绑定函数:QPushButton("显示文字", clicked=self.函数名无括号)
# 创建其他控件:一个文本输入框和一个包含三个按钮的水平布局  
self.le = QLineEdit()  # 文本输入框,可能用于输入待添加的项目名称  
self.addPb = QPushButton("增加项", clicked=self.addItem)  # 增加项目的按钮,绑定到addItem方法  
self.delPb = QPushButton("删除项", clicked=self.delItem)  # 删除项目的按钮,绑定到delItem方法  
# 增加一个查
self.searchPb = QPushButton("查询", clicked=self.searchItem)
# 增加一个改
self.changePb = QPushButton("修改", clicked=self.changeItem)
self.sortPb = QPushButton("项目排序", clicked=self.sortItem)  # 排序按钮,绑定到sortItem方法

设计布局

# 创建水平布局,并添加按钮  
hLayout = QHBoxLayout()
hLayout.setContentsMargins(0, 0, 0, 0)
hLayout.addWidget(self.addPb)
hLayout.addWidget(self.delPb)
hLayout.addWidget(self.searchPb)
hLayout.addWidget(self.changePb)
hLayout.addWidget(self.sortPb)# 创建垂直布局,并设置到当前QWidget上  
self.vLayout = QVBoxLayout(self)  
self.vLayout.addWidget(self.listView)  # 添加列表视图  
self.vLayout.addWidget(self.le)  # 添加文本输入框  
self.vLayout.addLayout(hLayout)  # 添加包含按钮的水平布局  

listView的简单样式

self.listView.setStyleSheet("""
QListView {
background-color: #FFE4E1;
color: #333333;
border: 1px solid #BBBBBB;
}
QListView::Item {
padding: 5px;
}
QListView::Item:hover {
background-color: #87CEFA;
color:blue;
}""")

增删查改函数

def addItem(self):num = self.mode.rowCount()s = self.le.text()if s != '':self.mode.appendRow(QStandardItem(s))def delItem(self):# 定位当前index = self.listView.currentIndex()if index.isValid():# 删除当前项self.mode.removeRow(index.row())else:self.messageBox = QMessageBox.information(self, "提示", "请选择要删除的内容")def searchItem(self):s = self.le.text()if s != '':for i in range(self.mode.rowCount()):if s == self.mode.item(i, 0).text():# 定位到 当前self.listView.setCurrentIndex(self.mode.index(i, 0))returnelse:# 弹窗提示self.messageBox = QMessageBox.information(self, "提示", "没有找到")def changeItem(self):s = self.le.text()# 获取当前定位index = self.listView.currentIndex()if s != '':if index.isValid():# 获取当前项item = self.mode.itemFromIndex(index)# 获取当前项的文本text = item.text()item.setText(s)self.messageBox = QMessageBox.information(self, "提示", "修改成功!")else:self.messageBox = QMessageBox.information(self, "提示", "请选择要修改的内容")def sortItem(self):self.mode.sort(0)

完整代码

# -*- coding: UTF-8 -*-
'''
@Project :测试 
@File    :pyqt6_test.py
@IDE     :PyCharm 
@Author  :一晌小贪欢
@Date    :2024/7/29 14:35 
'''import sys
from PyQt6.QtGui import QStandardItemModel, QStandardItem
from PyQt6.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication, QHBoxLayout, QListView, QLineEdit, \QMessageBoxclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.setWindowTitle("简易PyQt6-GUI界面实现列表的增删查改")self.resize(500, 350)self.list = ['奥运', '巴黎', '夺冠', '奥运健儿']# 创建四行一列标准数据模型self.mode = QStandardItemModel(4, 1)# 将数据中的列表项作为标准数据模型输出for i in range(self.mode.rowCount()):item = QStandardItem(self.list[i])self.mode.setItem(i, 0, item)self.mode.insertRow(4, QStandardItem("大家好"))self.listView = QListView()self.listView.setModel(self.mode)self.le = QLineEdit()self.addPb = QPushButton("增加项", clicked=self.addItem)self.delPb = QPushButton("删除项", clicked=self.delItem)# 增加一个查self.searchPb = QPushButton("查询", clicked=self.searchItem)# 增加一个改self.changePb = QPushButton("修改", clicked=self.changeItem)self.sortPb = QPushButton("项目排序", clicked=self.sortItem)hLayout = QHBoxLayout()hLayout.setContentsMargins(0, 0, 0, 0)hLayout.addWidget(self.addPb)hLayout.addWidget(self.delPb)hLayout.addWidget(self.searchPb)hLayout.addWidget(self.changePb)hLayout.addWidget(self.sortPb)self.vLayout = QVBoxLayout(self)self.vLayout.addWidget(self.listView)self.vLayout.addWidget(self.le)self.vLayout.addLayout(hLayout)# 添加样式self.listView.setStyleSheet("""QListView {background-color: #FFE4E1;color: #333333;border: 1px solid #BBBBBB;}QListView::Item {padding: 5px;}QListView::Item:hover {background-color: #87CEFA;color:blue;}""")def addItem(self):num = self.mode.rowCount()s = self.le.text()if s != '':self.mode.appendRow(QStandardItem(s))def delItem(self):# 定位当前index = self.listView.currentIndex()if index.isValid():# 删除当前项self.mode.removeRow(index.row())else:self.messageBox = QMessageBox.information(self, "提示", "请选择要删除的内容")def searchItem(self):s = self.le.text()if s != '':for i in range(self.mode.rowCount()):if s == self.mode.item(i, 0).text():# 定位到 当前self.listView.setCurrentIndex(self.mode.index(i, 0))returnelse:# 弹窗提示self.messageBox = QMessageBox.information(self, "提示", "没有找到")def changeItem(self):s = self.le.text()# 获取当前定位index = self.listView.currentIndex()if s != '':if index.isValid():# 获取当前项item = self.mode.itemFromIndex(index)# 获取当前项的文本text = item.text()item.setText(s)self.messageBox = QMessageBox.information(self, "提示", "修改成功!")else:self.messageBox = QMessageBox.information(self, "提示", "请选择要修改的内容")def sortItem(self):self.mode.sort(0)if __name__ == '__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

相关文章:

PyQt6简易案例代码GUI界面小工具——实现增、删、查、改(练手正合适)

目录 专栏导读1、库的介绍PyQt6的主要特点包括:使用PyQt6开发应用程序的一般步骤:库的安装 2、设计窗口设计列表视图设计输入框控件与按钮设计布局listView的简单样式增删查改函数 完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—P…...

JavaScript快速入门指南

JavaScript是一种广泛应用于网页开发的脚本语言,它可以让网页实现动态效果和交互性。无论是前端开发还是全栈开发,JavaScript都是不可或缺的一部分。本文将带你快速入门JavaScript,从基础语法到实际应用,让你快速上手这门强大的语…...

Esbuild介绍

Esbuild是一个由Evan Wallace基于Go语言开发的快速、可扩展的JavaScript和CSS打包器及压缩器。它以其极快的构建速度和高效的性能在众多构建工具中脱颖而出。 一、核心特性 超快的构建速度: Esbuild相比传统的构建工具(如Webpack)在构建速度…...

UnityShaderUI编辑器扩展

前言: 当我们在制作通用Shader的时候,避免不了许多参数混杂在一起,尽管在材质面板已经使用过Header标签来区分,但是较长的Shader参数就会导致冗余,功能块不够简约明了,如图: 对于Shader制作者来…...

分布式事务——2PC 代码示例

一 2PC代码示例 在Java中实现两阶段提交(2PC, Two-Phase Commit)协议通常涉及多个组件,包括事务协调者(Transaction Coordinator)和多个资源管理器(Resource Managers,如数据库)。在…...

vue实现简易的全局加载动画效果

效果展示 思路 封装一个组件,放Img,伪类样式,固定在屏幕fixed 然后App应用这个组件,Z index拉最大,防止用户在加载动画时乱点, v-show绑定loading,该数据可以放vuex还是任一的公共状态管理变…...

Linux网络工具“瑞士军刀“集合

一、背景 平常我们在进行Linux服务器相关运维的时候,总会遇到一些网络相关的问题。我们可以借助这些小巧、功能强悍的工具帮助我们排查问题、解决问题。 下面结合之前的一些使用经验为大家介绍一下一些经典应用场景下,这个网络命令工具如何使用的。例如怎…...

Sentinel隔离、降级、授权规则详解

文章目录 Feign整合Sentinel线程隔离熔断降级授权规则自定义异常结果 上一期教程讲解了 Sentinel 的限流规则: Sentinel限流规则,这一期主要讲述 Sentinel 的 隔离、降级和授权规则 虽然限流可以尽量避免因高并发而引起的服务故障,但服务还…...

C++11 列表初始化与类型声明

目录 ​ 0.前言 1.C11介绍 2.统一的列表初始化 2.1{}初始化 2.2initializer_list 2.2.1initializer_list 的基本用法 2.2.2用于类的 initializer_list 构造函数 2.2.3与标准库容器的结合 2.2.4优势与注意事项 3.新声明 3.1auto 3.1.1基本用法 3.1.2优势 3.1.3注意事项 3.2declt…...

缓存策略自定义:Laravel应用性能优化秘籍

缓存策略自定义:Laravel应用性能优化秘籍 在现代Web应用中,缓存是一种提高应用性能和响应速度的有效手段。Laravel框架提供了强大的缓存机制,支持多种缓存驱动,如文件、数据库、Redis等。然而,在某些情况下&#xff0…...

python连接sqlserver,封装操作

1封装 # 导入Flask类 import pymssql import tracebackclass Mssql(object):# 连接库def base(database):connect pymssql.connect(usersa,password123456,databasef{database},charsetutf8,as_dictTrue)if connect:print("数据库连接成功!")else:print…...

原生PHP/JS自主开发的交友内核框架婚恋交友系统V10

本文来自:婚恋交友系统V10 - 源码1688 应用介绍 原生PHP/JS自主开发的交友内核框架,极高性能、无捆绑、自主权、无流水扣点、独立全开源 01脱单盲盒:脱单盲盒类似于漂流瓶,先将自己《投放》到盲盒中,另一伴有缘将您取…...

如何在Java、Python、GO程序中使用AI人脸识别API接口

AI人脸识别是一种通过面部识别或确认一个人身份的软件。它通过识别和测量图像中的面部特征来工作。面部识别可以识别图像或视频中的人脸,确定两幅图像中的人脸是否属于同一个人,或者在大量现有图像中搜索人脸。 AI人脸识别的优势是什么? 高…...

在vue使用MQTT

在vue中使用MQTT 最近有个需求,需要前端直接链接mqtt,想到后面可能多出使用,就封装成了hooks 中间遇到了一个坑,就是浏览器默认不支持mqtt协议,其借助了webSocket实现的mqtt协议, 而mqtt默认未开启webSocke…...

DNS、网关、IP、DHCP

DNS、网关、IP、DHCP:深入剖析与理解 在计算机网络的世界中,DNS、网关、IP和DHCP是四个至关重要的概念,它们共同构建了互联网的基础架构,确保了数据的准确传输和设备的有效连接。本文将深入剖析这四个概念,帮助读者更…...

vue2 vue3 props 的处理机制

在 Vue 2 中,props 是单向数据流,父组件向子组件传递的 props 默认情况下是不具有响应式特性的。这意味着当父组件的数据发生变化时,如果传递给子组件的 props 发生变化,子组件不会自动更新视图。 具体来说,在 Vue 2 …...

C++第十弹 ---- vector的介绍及使用

目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…...

ValueError: invalid literal for int() with base 10: ‘a‘

ValueError: invalid literal for int() with base 10: ‘a‘ 目录 ValueError: invalid literal for int() with base 10: ‘a‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰&#xff…...

[C++探索]初始化列表,static成员,友元函数,内部类,匿名对象

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…...

搭建自己的金融数据源和量化分析平台(二):读取上交所股票列表

我在上交所没发现上交所有像深交所一样的一键下载股票xls文档的按钮,因此上交所的股票列表读取就会比较麻烦。总体思路是查出来所有股票的代码之后根据股票代码逐一发起HTTP请求读取公司英文名、总股本、流通股本等详细信息,这就导致上交所爬虫的网络交互…...

Kafka知识总结(分区机制+压缩机制+拦截器+副本机制)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 分区机制 分区策略 分区策略是决定生产者将消息发送到哪个分区的…...

WordPress原创插件:搜索引擎抓取首图seo图片

WordPress原创插件:搜索引擎抓取首图seo图片 插件设置 插件将在网站头部添加适当的meta标签,以便百度等搜索引擎抓取指定的固定图像。 插件下载 https://download.csdn.net/download/huayula/89596527...

Android Framework 之AMS

它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。 它除了管理四大组件外,同时也负责管理和调度所有的进程 AMS相关目录结构 AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下): frameworks/base/core/java/andro…...

AnConda环境配置学习笔记

AnConda环境配置 个人笔记,自己学习使用。 1、软件安装 去官网或者是清华大学镜像下载 2、环境配置 Conda 查看版本:conda --version 更新所有库 conda update --all(千万不要跟新,版本不匹配) matploitlib安装cond…...

架构师的36项修炼 学习笔记

架构师的36项修炼 学习笔记 分布式缓存 缓存特点 1.技术简单 2.性能提升明显 3.应用场景多 缓存数据存储 hash表 缓存的关键指标 命中率 缓存失效方式 超时失效 LLT 实时清除 代理缓存 反向代理缓存 多层反向代理缓存 内容分发网络CDN 通读缓存 包括代理缓存…...

Python | “IndexError: tuple index out of range” 【已解决】

Python | “IndexError: tuple index out of range” 【已解决】 IndexError: tuple index out of range 深度解析与实战指南 在Python编程中,IndexError: tuple index out of range是一个常见的错误,它发生在尝试访问元组(或其他可索引的数…...

Linux上部署easySpider及基本使用

一、安装及简介 默认使用Chrome浏览器。 1、下载压缩包 官网:易采集EasySpider:无代码可视化爬虫/浏览器自动化测试软件 Linux版只适用于Ubuntu 20.04及以上版本、Deepin、Debian及其衍生版本。 (建议使用)下载网址/Github下…...

Qt Designer,仿作一个ui界面的练习(二):部件内容的填充

有了完成了布局的基本框架设计之后,对各个部件逐步完成内容的填充。 一、还是从顶边栏开始: 1、在顶边栏的topLogo里面拖入一个QLabel(标签),命名为logoImage,删除标签的文字。 2、右键点击topLogo&#x…...

LIS2DH12传感器底电流100ua处理

默认已经正常初始化IIC和LIS2DH12之后,需要正常开启和进入低功耗传感器的处理。 主要是对两个寄存器的处理:20、1E ODR[3:0]数据速率选择。默认值:0000(0000:断电模式;其他:见表31&a…...

五、Spring Boot - 上手篇(1)

🌻🌻目录 一、快速入门:创建第一个SpringBoot 工程1.1 点击File--->New--->Project...1.2 选择版本和依赖的相关骨架包1.3 设置项目保存目录1.4 项目创建完成,工程主界面如下1.5 项目说明1.6 启动项目1.7 编写 HelloControl…...

Spring -- 使用XML开发MyBatis

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…...

openmv 学习笔记(24电赛笔记)

寻找特定目标 这个功能主要应用在,机器人寻找色块,无人机跟踪特定颜色,生产线上检测物体进行分类,还有人机交互等等功能应用。 相关函数 image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_thr…...

【C语言】【数据结构】二分查找(数组的练习)

目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 (1)查找3(数组里面存在的数) (2)查找12(数组里面不存在的数) 三、代码实现 四、计算mid公式的优化 一、…...

Web:Url 编码 -13

URL编码概述 HTTP协议只支持iso8859-1字符集。 而此字符集中只有英文数字常见符号。 所以HTTP原生是无法传输非iso8859-1字符的。 为了解决这个问题,提出了一种称之为URL编码的解决方案。 URL编解码详解 将非iso8859-1字符,进行转换 先将字符按照指定码表…...

typescript 引用数据类型

let arr1: number[] [1, 2, 3]; // 规定为数组数字 let arr2: (number | string)[] ["1", 2, 3]; // 数字或字符串 |就代表联合类型 也称元组 let arr3: [null, string] [null, "1"]; // 必须两个值:null和字符串 let arr4: […...

OpenCV库学习之cv2.Sobel函数

OpenCV库学习之cv2.Sobel函数 一、简介 cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子,通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子,能够有效地突出图像中的高频变化区域,即边缘。 二、…...

上传Git 仓库 勤勉git (超详细教程)

注册 官网: 我就喜欢动个仓库名字和分支名字 就创建了...

C/C++基础:宏

C/C基础:宏 简述宏的简单使用基础语法带参宏(宏函数)宏参字符串化#宏拼接## 宏的陷阱多行定义宏中的空格宏函数不是函数行末分号问题一些建议 宏的奇妙使用 简述 宏作为C/C最有特色的语言性质之一,犹如魔法一般,合理的…...

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...

一文带你掌握C++虚函数·和多态

9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数,只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…...

OpenCV 4.10 + OpenCV_contrib配置教程 仅供参考

参考:https://blog.csdn.net/qq_27278957/article/details/108224325 https://blog.csdn.net/weixin_43763292/article/details/130232863 OpenCV:https://github.com/opencv/opencv/releases/tag/4.10.0 OpcenCV_contrib: https://github.com/opencv/o…...

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog:开源用户行为分析框架,让数据分析更轻松 在数据驱动的时代,找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了,开源免费的 ClkLog 就是你的不二选择!本文将为你详细介绍 ClkLog 的功能特点、技术架…...

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…...

面试题:如何验证代码的可靠性

代码结构上的: 1 可扩展性 是否否和开闭原则 2 性能,数据结构用的是否合理,算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …...

前端开发的十字路口,薪的出口会是AI吗?

前言 在数字化转型的浪潮中,前端开发一直扮演着至关重要的角色,它连接着用户与产品之间的桥梁。然而,随着技术的不断进步和社会经济环境的变化,前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…...

pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!

pdf太大怎么压缩大小?在数字化洪流席卷的当下,PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路,它们不仅贪婪地吞噬着宝贵的存储空间,更如沉重的枷锁,拖曳着我们的工作进度,步入迟缓之境,试…...

leetcode-148. 排序链表

题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&#x…...

16 html网页服务和nginx服务

第十六次7.29 1.静态页面 1安装httpd [rootweb ~]# yum -y install httpd 2.真机访问页面 [rootweb html]# echo "静态html文件" > index.html 传入照片再次访问 静态资源,根据开发着保存在项目资源目录中的路径访问静态页面的资源 2.Apache 1.安…...

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧,初级的玩法是在一个9*9的棋盘上找到没有雷的格子,而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…...

算法入门:Java实现排序、查找算法

链接:算法入门:Java实现排序、查找算法 (qq.com) 冒泡/选择/插入/希尔排序代码 (qq.com) 快排/归并/堆排/基数排序代码 (qq.com)...