甄文超

TNT 数字生活

All Posts in 2024



Sqlsugar杂记

1 不支持更新主键 ORM默认不支持修改主键,这种需求有2种方案 1、删除当前记录,然后在添加一条新记录(因为主键都可以更新,说明没有外部引用,可以直接删掉在加) 2、新建一个没有主键的实体,指定表名用Wherecolumns更新 …

ORM

Ubuntu安装nginx

本文档适用于在Ubuntu20.04系统下部署nginx 一、使用apt-get命令安装nginx 注:以下命令都是在root用户下使用 1.检查是否存在apt命令 apt –version 说明:出现版本号就说明当前环境存在apt 2. 更新apt命令 apt update 3. 安装nginx apt-get install nginx 4. 查看nginx版本 nginx -v 5. 启动nginx systemctl start nginx 6. 查看nginx的状态  systemctl status nginx   二、 卸载上述nginx安装方式  1. 先停止nginx命令 systemctl stop nginx  2. 通过apt-get命令卸载nginx apt-get --purge autoremove nginx …

Linux

CNAS和CMA的区别和相似点

检测检测机构在开展相关活动前必须要取得相关资质,目前国内主要的实验室资质有CMA和CNAS。 01 什么是CMA与CNAS资质? -CMA(China Inspection Body and Laboratory Mandatory Approval),称作检验检测机构资质认定标志,又称中国计量认证;是根据中华人民共和国计量法的规定,由省级以上人民政府计量行政部门对检测机构的检测能力及可靠性进行的一种全面的认证及评价,只有具有此标志,才能成为合法的检验检测机构,才能按证书上所批准列明的项目,从事检测检验活动,在检测检验证书或报告上使用CMA标识。   -CNAS(China National Accreditation Service for Conformity Assessment),是中国合格评定国家认可委员会的英文缩写;CNAS是根据《中华人民共和国认证认可条例》、《认可机构监督 …

project manage

Blazor 组件生命周期

Blazor 组件生命周期 Blazor 组件具有定义完善的生命周期,该生命周期从首次创建时开始,在销毁时结束。 组件生命周期由一组事件控制,这些事件响应特定触发器。 例如组件被初始化、用户与组件交互或组件所在的页面被关闭。 本单元介绍 Blazor 组件生命周期中发生的事件。 你将了解如何处理这些事件以优化完成的工作,并提高 Blazor 页面的响应能力。 Blazor 组件生命周期 Blazor 组件表示 Blazor 应用中的视图,它们定义布局和 UI 逻辑。 应用运行时,这些组件会生成 HTML 标记。 用户交互事件可以触发自定义代码,并且可以更新组件以重新呈现显示。 页面关闭时,Blazor 会删除组件,并清理所有资源。 当用户返回到页面时,将创建新实例。 下图说明了在组件生命周期内发生的事件,以及可用于处理这些事件的方法。 Blazor 提供每种方法的同步和异步版本, …

blazor

Nginx配文件说明

Nginx配置文件(通常是nginx.conf)是Nginx服务器的主要配置文件,它决定了Nginx如何处理和响应HTTP请求。Nginx配置文件由多个部分组成,每个部分都有其特定的用途和配置指令。以下是Nginx配置文件的主要说明: 一、配置文件结构 Nginx配置文件主要由三大部分组成:全局块、events块和http块。 全局块:主要用于设置影响Nginx服务器整体运行的配置指令。 常见的配置指令包括:user:指定运行Nginx服务器的用户和组。 worker_processes:设置工作进程的数量,通常设置为CPU核心数。 pid:指定Nginx主进程ID文件的存储位置。 error_log:设置错误日志的存放路径和日志级别。 events块:主要用于设置网络连接相关的配置指令。 常见的配置指令包括:worker_connections:设置每个工作进程能够同时打开的最大 …

Linux

CentOS 上的 Nginx 用法

CentOS 上的 Nginx 用法主要包括安装、配置、启动、停止、重启以及相关的维护操作。以下将详细介绍这些步骤: 一、安装 Nginx 在 CentOS 上安装 Nginx,通常有两种方式:使用 YUM 包管理器安装(适用于官方仓库或 EPEL 仓库中包含的 Nginx 版本)和从源代码编译安装(适用于需要特定版本或自定义 Nginx 的情况)。 1. 使用 YUM 包管理器安装 安装 EPEL 仓库(如果 Nginx 不在默认的 CentOS 仓库中): sudo yum install epel-release 安装 Nginx sudo yum install nginx 二、启动 Nginx 启动 Nginx 服务: sudo systemctl start nginx 三、配置 Nginx Nginx 的配置文件通常位于 /etc/nginx/nginx.conf(使 …

Linux

linux vim编辑器

Vim(Vi IMproved)是一个功能强大的文本编辑器,广泛用于Unix、Linux和MacOS系统,也支持Windows。Vim提供了丰富的编辑命令,允许用户高效地进行文本编辑。以下是一些基本的Vim编辑命令分类介绍: 基本模式 Vim有三种主要模式:普通模式(Normal mode)、插入模式(Insert mode)和命令行模式(Command-line mode)。 普通模式:启动Vim时默认进入此模式,可以进行光标移动、复制、粘贴、删除等操作。 插入模式:在普通模式下按下i、a、o等键进入,可以进行文本输入。 命令行模式:在普通模式下输入:(冒号)进入,用于执行保存、退出、搜索等命令。 光标移动 h:向左移动光标 j:向下移动光标 k:向上移动光标 l:向右移动光标 w:移动到下一个单词的开头 b:移动到上一个单词的开头 e:移动到当前单词的末尾 0(数字零):移动到行首 …

Linux

ubuntu制作net6网站启动服务

步骤1: 创建systemd服务文件 在Ubuntu上,你需要为你的.NET 6 网站创建一个systemd服务文件。这个文件定义了如何启动、停止和管理你的服务。 打开文本编辑器,创建一个新的服务文件,例如/etc/systemd/system/myapp.service。 在服务文件中,添加以下内容(根据你的实际路径和需求进行修改): [Unit] Description=My .NET 6 Web Application [Service] WorkingDirectory=/path/to/your/app Environment=ASPNETCORE_URLS=http://0.0.0.0:8080 ExecStart=/usr/bin/dotnet /path/to/your/app/YourApp.dll Restart=always …

.NET Linux

ubuntu安装sqlserver express

SQL Server 2022 安装 SQL Server 2022先决条件:服务器内存至少需要2 GB 。 1、导入公共存储库 GPG 密钥 $ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc 2、注册 SQL Server Ubuntu 存储库 sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)" 3、运行以下命令以安装 SQL Server sudo apt-get update sudo apt-get install -y mssql- …

MS SQL Linux

SQL Server的三个版本——Evaluation、Developer和Express的差异

SQL Server的三个版本——Evaluation(评估版)、Developer(开发者版)和Express(速成版)在功能、用途、许可和价格等方面存在显著差异。以下是对这三个版本区别的详细分析: 一、功能差异 版本 功能描述 Evaluation(评估版) 具有Enterprise版(企业版)的所有功能,但仅供评估使用,提供180天的试用期。试用期结束后,SQL Server服务将自动停止。评估版不提供官方的技术支持。 Developer(开发者版) 包含Enterprise版的所有功能,但仅限于开发和测试环境使用,不能用于生产环境。它是开发、测试和演示人员的理想选择。 Express(速成版) 功能有限,适用于小型应用程序和个人项目。它包含核心功能,但有一些限制,如数据库大小、CPU内核和内存使用量。 二、用途差异 版本 用途描述 Evaluation(评估版) …

MS SQL

ubuntu 命令集

1、查看所有打开的端口 ss是另一个用于检查套接字的实用工具,它可以作为netstat的现代替代品。要查看所有监听的端口,你可以使用以下命令: ss -tuln -t 表示显示TCP端口 -u 表示显示UDP端口 -l 表示仅显示监听状态的套接字 -n 表示直接以数字形式显示地址和端口号,不进行解析 …

Linux

Ubuntu 安装net6

1. 安装 .NET 6 SDK 首先,你需要在 Ubuntu 系统上安装 .NET 6 SDK。你可以通过 Microsoft 的官方包管理器来安装,它支持多种 Linux 发行版,包括 Ubuntu。 更新你的包列表(可选但推荐) sudo apt update 安装.NET SDK。你可以从 Microsoft 的官方文档获取最新安装命令,但以下是一个基本示例(请访问 .NET 官网 获取最新安装脚本): wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get …

Linux

Blazor 表单的强大功能

用户使用表单输入数据。 在经典 Web 应用中,可以使用 <form> 元素创建表单,并允许用户使用 <input> 元素提供数据。 可在用户提交表单时验证输入。 如果验证成功,则可以执行相应的操作,例如使用提供的信息向数据库添加新条目或更新记录。 <form> 和 <input> 元素提供的功能非常简单,但相对基础。 Blazor 扩展了表单功能及其 <EditForm> 组件。 此外,Blazor 提供了一系列专用输入元素,可用于设置用户所输入数据的格式并进行验证。 在本单元中,你将了解如何使用 <EditForm> 元素和输入元素来生成功能性表单。 你还将了解如何使用表单进行数据绑定。 什么是 EditForm? EditForm 是一个 Blazor 组件,它在 Blazor 页面上履行 HTML 表单这一角色。 EditForm 和 HTML 表单之间的主要区别是: 数据绑定:可 …

blazor

使用 Blazor 事件处理程序将 C# 代码附加到 DOM 事件

大多数 HTML 元素都会公开在发生重要事件(例如页面加载完成、用户单击某个按钮或 HTML 元素的内容已更改)时触发的事件。 应用可以通过多种方式处理事件: 应用可以忽略此事件。 应用可以运行用 JavaScript 编写的事件处理程序来处理事件。 应用可以运行用 C# 编写的 Blazor 事件处理程序来处理事件。 本单元将详细介绍第三个选项:如何用 C# 创建用于处理事件的 Blazor 事件处理程序。 使用 Blazor 和 C# 处理事件 Blazor 应用的 HTML 标记中的每个元素都支持许多事件。 这些事件中的大多数对应于常规 Web 应用程序中可用的 DOM 事件,但你也可以创建通过编写代码触发的用户定义事件。 若要使用 Blazor 捕获事件,请编写处理该事件的 C# 方法,然后使用 Blazor 指令将事件绑定到该方法。 对于 DOM 事件,Blazor 指令与等效 …

blazor

Blazor 布局

编写 Blazor 布局 Blazor 布局是特定类型的组件,因此编写 Blazor 布局与编写其他组件以在应用中呈现 UI 类似。 例如,以相同的方式使用 @code 块和很多指令。 布局在扩展名为 .razor 的文件中定义。 文件通常存储在应用的&ldquo;Shared&rdquo;文件夹中,但你可以选择将其存储在使用它的组件可访问的任何位置。 布局组件有两个独特的要求: 必须继承 LayoutComponentBase 类。 必须在要呈现发起引用的组件内容的位置包含 @Body 指令 @inherits LayoutComponentBase &lt;header&gt; &lt;h1&gt;Blazing Pizza&lt;/h1&gt; &lt;/header&gt; &lt;nav&gt; &lt;a href="Pizzas"&gt;Browse …

blazor

Blazor路由

使用路由模板 用户请求你的 Web 应用中的页面时,可以使用 URI 中的信息指定要查看的内容。 例如: http://www.contoso.com/pizzas/margherita?extratopping=pineapple 在协议和网站地址之后,此 URI 指示用户想要了解玛格丽特披萨。 此外,问号后的查询字符串显示他们有兴趣额外添加一份菠萝配料。 在 Blazor 中,使用路由来确保将每个请求发送到最适合的组件,并且该组件具有显示用户所需内容的全部信息。 在本例中,你可能希望将请求发送到 Pizzas 组件,并使该组件显示玛格丽特披萨,并显示有关添加菠萝配料的信息。 Blazor 使用名为 Router 组件的专用组件路由请求。 它在 App.razor 中配置如下: &lt;Router AppAssembly="@typeof(Program).Assembly"& …

blazor

Blazor数据绑定和事件

呈现 C# 表达式值 若要在 Razor 中呈现 C# 表达式的值,可以使用前导 @ 字符。 例如,Counter 组件可以呈现其 currentCount 字段的值,如下所示: &lt;p role="status"&gt;Current count: @currentCount&lt;/p&gt; Razor 通常可以判断出 C# 表达式何时结束,以及何时转换回编写 HTML。 但是,也可以使用 parens 来明确表达式的开始和结束。 &lt;p role="status"&gt;Current count: @(currentCount)&lt;/p&gt; 添加控制流 可以使用普通的 C# 语句将控制流添加到组件呈现逻辑。 例如,可以使用 C# if 语句有条件地呈现某些内容,如下所示: @if (currentCount &gt; 3) { &lt;p&gt; …

blazor


gitlab安装

在CentOS上部署GitLab的步骤可以归纳如下。请注意,以下步骤基于CentOS 7和GitLab的较新版本,具体细节可能会因版本和环境差异而有所不同。 1. 系统环境准备 检查系统版本:确保你的CentOS版本与GitLab支持的版本兼容。 磁盘分区:确保有足够的磁盘空间来安装GitLab及其依赖项。 外网环境配置:如果服务器位于内网环境,可能需要配置代理或下载必要的rpm包到本地进行离线安装。 内存至少4G 2. 安装依赖项 在安装GitLab之前,需要安装一系列依赖项。可以使用yum命令来安装这些依赖项: sudo yum install -y curl policycoreutils openssh-server openssh-clients postfix cronie python3-policycoreutils policycoreutils-python   这些 …

Linux

gitlab初始化

GitLab默认密码 gitlab-ce-14初装以后,把密码放在了一个临时文件中了/etc/gitlab/initial_root_password 这个文件将在首次执行reconfigure后24小时自动删除 登录并修改密码 拿到这个密码后需要尽快登录web界面进行密码修改 …

Linux

Blazor Server WebApi

在Blazor里提供Webapi服务的方法 1、注册Controller服务 builder.Services.AddControllers();   2、监听控制器 //app.UseHttpsRedirection(); 如果使用https app.MapControllers();   3、注册Swagger builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your App Title", Version = "v1" }); });   4、启动Swagger服务 app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", " …

blazor

bootstrap blazor table的用法注意事项

一、高级查询的问题 使用高级查询时,如果查询条件中包含多选组件(如:MultiSelect)时,如果SearchMode使用"SearchMode.Popup",会出现多选组件的操作结果在当前页面无法渲染的情况。 有两种方案可以解决: 1)使用SearchMode.Top模式 2)使用CustomerSearchTemplate模式自定义查询内容,并且将其组件化 …

Radzen.Blazor

多个域名共享同一台服务器80端口:nginx实现IIS服务器混用

本篇介绍N多种web容器共享80端口方法,用上大名鼎鼎的NGINX。提到IIS,我们知道它只能安装在WINDOWS系统,所以本篇重在讲解windows系统的安装和配置. 步骤一: 下载和安装nginx 到官网下载nginx软件,网址:nginx: download 生产环境尽量选择stable版本的 把下载的压缩文件解压到指定文件夹 步骤二: 启动和停止nginx 打开一个cmd命令窗口,切换到刚解压缩的目录,输入 nginx 或 nginx.exe 或者 start nginx ,即可启动nginx 这个时候到浏览器地址栏输入 http://127.0.0.1/ 或 http://localhost 回车,可以看到nginx已经工作了 输入nginx命令  nginx -s stop (快速停止nginx)  或  nginx -s quit (完整有序的停止nginx)可以终止 …

IIS

log4net .net6的Blazor程序标准案例

第一步 安装 通过NuGet直接搜索进行安装安装log4net 第二步 编写log4net配置参数 1.添加 log4net.config 文件并更改属性 2.编写 log4net.config &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;log4net&gt; &lt;!-- Define some output appenders --&gt; &lt;appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"&gt; &lt;!-- value="logs/info.log"--&gt; &lt;file value="logs/" /&gt; &lt;!--追加日志内容--&gt; &lt; …

.NET

c#创建线程的方法

public class MainViewModel { private readonly TaskScheduler _backgroundTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); public void StartConcurrentTask() { Task.Factory.StartNew(() = { // 执行耗时操作 for (int i = 0; i …

.NET

C# 异步编程

随着.NET Core的流行,相信你现在的代码中或多或少的会用到async以及await吧!毕竟已成标配。那么我们为什么要用async以及await呢?其实这是微软团队为我们提供的一个语法糖,让我们不用996就可以轻松的编写异步代码,并无太过神奇的地方。那么,问题来了,什么是异步?异步到底又是怎样的一个过程呢? 从一个故事说起 在开始讲异步前我们先从一个生活中的小故事说起吧。话说2019年12月15日周日这一天有位程序猿小祝在这天居然没有加班,选择在家休息了,然后他习惯性的用Microsoft To Do罗列了一下这天要做的事情,如下图所示: 这一天这个程序猿小祝计划早上九点起床洗澡,然后吃早餐,洗衣服,分享一篇关于C#异步相关的文章,晚上在家加下班~~没错,这个苦逼休息的时候也得工作,不然下周的任务有可能完不成要挨批了。 这个时候这个程序猿小祝可以选择,1.起床洗澡,2.吃早餐,3.洗 …

.NET



vue中render函数阅读性比较好的写法推荐

{ title:'操作', align: 'center', render: (h ,params) ={ let row = params.row; let status = row.status; let that = this; let editButtonStyle = { props: { type: 'success', size: 'small', ghost: true }, on: { click: () = { that.edit(row); } } }; let editButton = h( 'Button' , editButtonStyle , '编辑' ); let viewSourceButtonStyle = { props: …

Vue

wps表格怎么显示进度条

第一步:打开一个需要显示进度条的wps表格。 第二步:在需要显示进度条的单元格中输入完成率。 第三步:在&ldquo;开始&rdquo;菜单中找到&ldquo;条件格式&rdquo;选项。 第四步:单击&ldquo;条件格式&rdquo;中的&ldquo;数据条&rdquo;,会展示数据条的样式。 第五步:根据自己的需要选择其中一种进度条。 第六步:如下图所示,输入完成率的单元格中显示了进度条。  …

project manage

Qt Android 全屏设置

本文解决的问题是Qt 编译到 Android 上,实现全屏的办法,同样适用于qml 看了很多网上说的办法,大多都是基于Qt 5.8 5.9的版本,都是说需要去重写java的OnCreate()方法,哇,各种骚操作,然后我发现程序直接就崩溃了。 冥思苦想,按照下面的办法成功了。 申明:我的测试环境是Qt 5.12 ,目前最新版本,应该5.10过后的版本都应该是这样设置的。 如果你的Qt开发版本低于5.10,请看其他人的帖子。 其实方法很简单,跟着我左手右手一个慢动作。 第一步:你需要一个 AndroidManifest.xml 文件,这个文件你在编译的时候会自动的生成,不再需要我们自己去新建了,Qt新版本自动生成,所以,老版本的Qt开发,真的难受。这个文件在你的生成目录下。我的目录如下: D:Peterbuild-Peter-Android_for_armeabi_v7a_Clang_ …

QT

QTimer

QTimer类提供了重复和单次触发信号的定时器。QTimer类为定时器提供了一个高级别的编程接口。很容易使用: 首先,创建一个QTimer,连接timeout()信号到适当的槽函数,并调用start(), 然后在恒定的时间间隔会发射timeout()信号。 当QTimer的父对象被销毁时,它也会被自动销毁。 示例1: QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), [=](){ //to do... }); timer->start(1000); start()之后,每秒执行todo 示例2: 通过静态函数QTimer::singleShot()让定时器只执行一次: QTimer::singleShot(200, [=](){ //todo ... }); 也可以通过设置 …

QT

C++函数参数传递的三种方式

1、值传递 将已经初始化的变量值(或常量)传递到函数中。 int func(int value) { int ret = value++; return ret; } //调用函数时,实参需要先进行初始化 int num = 2; func(num); 因为,值传递是将实参的值赋值给了形参,形如上例中,实际上是:int value; value=num;,所以实参必须要先进行初始化。 另外,因为只是赋值,所以形参value值的改变,并不会影响实参num的值。 2、指针传递 对于指针传递来说,传递的是指针变量,也是值传递(此时值是指针),是值传递就必须先进行初始化。 1)形参未被初始化的情况(不被允许) int func(int *value) { value = (int*)malloc(sizeof(int)); } int *p ;//仅定义 …

QT C++

C++11 Lambda的变量捕获

一、Lambda Lambda一般格式是: [capture](param) mutable -&gt;return-type {body} lambda中有个闭包的概念,也就是C这类语言中的域的概念,要访问闭包外的变量,就必须通过 [] 来捕获[]的形式有以下: [] 未定义任何变量,不能访问lambda之外定义的变量 [x, &amp;y] x是通过值复制来访问的,y通过引用访问 [&amp;] 能通过引用访问外部所有变量 [=] 外部变量都是通过值复制来访问 [&amp;, x] x通过值复制访问,其他变量通过引用访问 [=, &amp;z] z通过引用访问,其他变量通过值捕获 例1: int x=0; int y = 42; auto fun = [x, &amp;y] { std::cout&lt;&lt;"x: "&lt;& …

QT C++

WPS 单元格自定义格式-带图标的格式

1、使用效果: 正常显示: 编辑显示: 左侧的图标通过单元格的格式完成 2、实现方式: 右键单元格-&gt;设置单元格格式-&gt;自定义格式 将类型设置成如图所示,即可 3、图标怎么插入类型文本框 复制、粘贴 …

Windows

QList 集合查询方法

在QList中,如果要根据某个类的属性值来查找对象,可以使用std::find_if函数来实现。这两种方法都需要提供一个谓词函数(Predicate Function),用于判断目标对象是否符合条件。 假设我们有一个Person类,其中包含name和age两个属性,代码如下所示: class Person { public: QString name; int age; }; 现在有一个QList类型的对象,我们想根据name属性来查找对象。可以按以下步骤进行操作:  1、调用std::find_if函数来查找目标对象。 // 使用 std::find_if auto it = std::find_if(personList.begin(), personList.end(), [=](const Person& p) { return p. …

QT C++

qt windows 打包

步骤一:进入项目,指定为Release版本编译; 步骤二:将hello.exe文件拷贝到空文件夹“e:\1” 步骤三:在开始->程序里打开构建器 ,如图 步骤四: 1、打开hello.exe文件所在的目录 。 首先收入盘符“e:”,进入e盘根目录;然后 cd "全路径",进入目录。(cd 不能跨盘符跳转) 2、输入"windeployqt hello.exe",获取依赖文件 步骤五:将项目引用的第三方类库拷贝过来。 步骤六:收工 点击hello.exe直接运行 …

QT

qt openssl rsa

1、下载Open SSL,并安装 一定要下载全量的 2、配置Pro 3、rsa .h #ifndef RSA_H #define RSA_H #include <QString> #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/err.h> #define BEGIN_RSA_PUBLIC_KEY "BEGIN RSA PUBLIC KEY" #define BEGIN_RSA_PRIVATE_KEY "BEGIN RSA PRIVATE KEY" #define BEGIN_PUBLIC_KEY "BEGIN PUBLIC KEY" #define BEGIN_PRIVATE_KEY "BEGIN PRIVATE KEY" #define KEY_LENGTH …

QT C++

qt creator 添加qt版本

在qt creator中收到添加qt版本的方法 第一步 打开构建套件对话框 第二步 选择Qt版本标签 第三步 创建构建套件 第四步 设置CMake …

QT

QT 静态函数发送信号

应用场景 在编写相机程序时,使用了相机的回调函数,此回调函数为静态成员函数,在需要发送的信号时发现静态成员函数直接发送信号会有问题; 非静态成员函数的非法调用。如下图: 思路原理 新建一个类,静态函数发送信号,用新建的类接收,然后再将这个信号发送出去。 项目案例 特意写了案例,ToolA类中静态函数发送信号,由MainWindow接收,如下: ToolA.h #ifndef TOOLA_H #define TOOLA_H #include &lt;QObject&gt; class ToolA : public QObject { Q_OBJECT public: explicit ToolA(QObject *parent = nullptr); static void Funcoo();//静态函数 将从此函数中发射出信号 private: …

QT C++