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

Qt自定义 Qt Designer 插件

创建 Qt Designer 插件项目

Qt 提供两种设计插件的 API,可以用于扩展 Qt 的功能。高级 API 用于设计插件以扩展 Qt 的功能,例如定制数据库驱动、图像格式、文本编码、定制样式等。Qt Designer 里大量采用了插件,点击 Qt Creator 的“Help”->“About Plugins”菜单项,会显示 Qt Creator 里已经安装的各种插件。
低级 API 用于创建插件以扩展自己编写应用程序的功能,最常见的就是将自定义 Widget 组件安装到 UI 设计器里,用于窗口界面设计。本篇文章就将上一篇中的窗口电池组件编写成 UI 组件安装到 UI 设计器中。

查看 Qt Creator 所使用的编译器

想要编译出 UI 设计器中可以使用的插件,就需要知道编译 Qt Creator 的编译器,查看方式如下:

image.png

image.png

从“关于”中可以看出,我这个版本的 Qt Creator 是使用 MSVC2019 编译器编译出来的,所以我们在创建插件项目的使用需要使用 MSVC2019 编译器。

创建插件项目

  • 第一步是设置项目名称和保存路径,这里我取名叫 QwBatteryPlugin
  • 第二步是选择项目编译器,可以选择多个编译器,在编译时,再选择具体的编译器。但是实际上我们只能选择 MSVC2019 才有用。
  • 第三步是自定义 QWidget 类的名称,需要在左侧的 WIdget classes 列表里设置类名,右侧就会自动补全文件名,这里我添加一个 QwBattery 类。还可以选择一个图标作为自定义组件在 UI 设计器组件面板里的显示图形。

参考步骤如下:

image.png

image.png

image.png

image.png

image.png

插件项目各文件的功能实现

QwBatteryPlugin 类

qwbatteryplugin.h 文件中的内容是对插件类 QwBatteryPlugin 的定义,类定义完成代码如下:

#ifndef QWBATTERYPLUGIN_H
#define QWBATTERYPLUGIN_H#include <QDesignerCustomWidgetInterface>class QwBatteryPlugin : public QObject, public QDesignerCustomWidgetInterface
{Q_OBJECTQ_INTERFACES(QDesignerCustomWidgetInterface)Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")public:explicit QwBatteryPlugin(QObject *parent = nullptr);bool isContainer() const override;bool isInitialized() const override;QIcon icon() const override;QString domXml() const override;QString group() const override;QString includeFile() const override;QString name() const override;QString toolTip() const override;QString whatsThis() const override;QWidget *createWidget(QWidget *parent) override;void initialize(QDesignerFormEditorInterface *core) override;private:bool m_initialized = false;
};#endif // QWBATTERYPLUGIN_H

QwBatteryPlugin 类实现了 QDesignerCustomWidgetInterface 接口,这是专门为 Qt Designer 设计自定义 WIdget 组件的接口。在这里类的定义里,除了 Q_OBJECT 宏以外,还用了 Q_INTERFACES 声明了实现的接口,用 Q_PLUGIN_METADATA 声明了元数据名称,这些都无需改动。
public 部分的函数都是观察插件信息或功能的一些函数,通过其实现代码可以看出这些函数的功能。下面是 qwbatteryplugin.cpp 文件里实现的代码:

#include "qwbatteryplugin.h"
#include "qwbattery.h"#include <QtPlugin>QwBatteryPlugin::QwBatteryPlugin(QObject *parent): QObject(parent)
{}void QwBatteryPlugin::initialize(QDesignerFormEditorInterface * /* core */)
{if (m_initialized)return;// Add extension registrations, etc. herem_initialized = true;
}bool QwBatteryPlugin::isInitialized() const
{return m_initialized;
}QWidget *QwBatteryPlugin::createWidget(QWidget *parent)
{return new QwBattery(parent);
}QString QwBatteryPlugin::name() const
{return QLatin1String("QwBattery");
}QString QwBatteryPlugin::group() const
{return QLatin1String("");
}QIcon QwBatteryPlugin::icon() const
{return QIcon(QLatin1String(":/batteryicon.ico"));
}QString QwBatteryPlugin::toolTip() const
{return QLatin1String("");
}QString QwBatteryPlugin::whatsThis() const
{return QLatin1String("");
}bool QwBatteryPlugin::isContainer() const
{return false;
}QString QwBatteryPlugin::domXml() const
{return QLatin1String(R"(<widget class="QwBattery" name="qwBattery">
</widget>)");
}QString QwBatteryPlugin::includeFile() const
{return QLatin1String("qwbattery.h");
}

这些函数的部分内容是根据创建插件向导里设置的内容自动生成的。createWidget() 函数创建一个 QwBattery 类的实例,在 UI 设计器里作为设计实例;name() 函数返回组件的类名称;group() 函数设置组件安装在面板里的分组名称;icon() 设置组件的图标;isContaoner() 设置组件是否作为容器,false 表示不作为容器,不能在这个组件上放置其他组件;domXml() 函数用 XML 设置组件的一些属性,缺省的只设置类名和实例名。

QWBatteryPlugin.pro 的内容

QwBatteryPlugon.pro 是插件项目的项目管理文件,内容如下:

# 表示项目作为插件,编译后只有lib和dll(或so)
CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(qwbatteryplugin)
# 项目是一个库,一般的应用程序模版类型是app
TEMPLATE    = libHEADERS     = qwbatteryplugin.h
SOURCES     = qwbatteryplugin.cpp
RESOURCES   = icons.qrc
LIBS        += -L. QT += designertarget.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += targetinclude(qwbattery.pri)

内置项目 qwbattery.pri

HEADERS += qwbattery.h
SOURCES += qwbattery.cpp

组件类 QWBattery 定义

QWBattery 类的定义与上一篇文章中的定义基本一样,只是在声明类的时候需要添加一个宏 QDESIGNER_WIDGET_EXPORT,并且用 Q_PROPERTY 宏定义了一个属性 powerLevel。完整定义如下:

#ifndef QWBATTERY_H
#define QWBATTERY_H#include <QDesignerExportWidget>
#include <QWidget>
#include <QPaintEvent>class QDESIGNER_WIDGET_EXPORT QwBattery : public QWidget
{Q_OBJECTQ_PROPERTY(int powerLevel READ powerLevel WRITE setPowerLevel NOTIFY powerLevelChanged DESIGNABLE true) // designable
public:explicit QwBattery(QWidget *parent = nullptr);void setPowerLevel(int pow);int powerLevel();void setWarnLevel(int warn);int warnLevel();QSize sizeHint();signals:void powerLevelChanged(int);private:QColor mColorBack = Qt::white;QColor mColorBorder = Qt::black;QColor mColorPower = Qt::green;QColor mColorWarning = Qt::red;int mPowerLevel = 60;int mWarnLevel = 20;protected:void paintEvent(QPaintEvent* event) override;};#endif // QWBATTERY_H
  • QDESIGNER_WIDGET_EXPORT 宏表示将自定义的组件类从插件导出给 Qt Designer 使用,必须在类名钱使用此宏。
  • Q_PROPERTY 宏定义属性,这里定义了一个 int 类型的属性 powerLevel。READ 宏声明了属性的读取函数时 powerLevel();WRITE 宏声明了设置属性值的函数是 setPowerLevel();NOTIFY 宏声明了其值变化时发射的信号是 powerLevelChanged();DWSIGNABLE 宏定义属性在 UI 设计器里是否可见,缺省为 true。

插件的编译和安装

image.png

在写完代码后,分别在 debug 和 release 模式下进行构建(注意不是运行),然后在对应的 debug 和 release 目录就会生成 dll 和 lib 文件。分别将 debug 和 release 产生的 dll 文件复制到以下两个目录:

C:\Qt6\6.7.3\msvc2019_64\plugins\designer
C:\Qt6\Tools\QtCreator\bin\plugins\designer

重启 Qt Creator,使用 UI 设计器设计窗口时,在左侧的组件面板里就会看到我们刚刚自定义的插件:

image.png

使用自定义插件

在项目源文件目录下创建一个 include 文件夹,将用到的插件的 头文件lib 文件都复制进去,然后在 Qt Creator 中添加外部库。

image.png

添加后,项目配置文件会添加如下的依赖:

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/include/ -lqwbatteryplugin
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/include/ -lqwbatteryplugindINCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

使用 MSVC 编译器输出中文的问题

在 Qt Creator 中使用 MSVC 编译器编译项目时,若处理不当容易出现中文字符串乱码的问题。这是由于 Qt Creator 保存的文件使用的是 UTF-8 编码,MSVC 编译器虽然可以正常编译 BOM 的 UTF-8 编码的源文件,但是生成的可执行文件的编码是 Windows 本地字符集,比如 GB 2312。也就是在可执行文件中,字符串“当前电量”是以 GB2312 编码的,而可执行程序执行这条语句时,是对这个字符串以 UTF-8 解码的,这样就出现了乱码。
解决这个问题的办法有两种,一种是使用 QStringLiteral() 宏封装字符串,另一种方法是强制 MSVC 编译器生成的可执行文件使用 UTF-8 编码。QStringLiteral(str) 宏在编译时将一个字符串 str 生成字符串数据,并且存储在编译后文件的只读数据段中,程序运行时使用到此字符串时,只需要读出此字符串数据即可。所以,我们可以这么写:

QString str = QStringLiteral("当前电量:") + QString::asprintf("%d%%", arg1);

程序中需要使用 QStringLiteral() 宏对每个中文字符串进行封装,并且不能再使用 tr() 函数用于翻译字符串;强制 MSVC 编译器采用 UTF-8 编码生成可执行文件,需要在每个使用到中文字符串的头文件和源文件的前部加上如下语句:

#if __MSC_VER >= 160
#pragma execution_character_set("utf-8")
#endif

参考资料:https://github.com/0voice

相关文章:

Qt自定义 Qt Designer 插件

创建 Qt Designer 插件项目 Qt 提供两种设计插件的 API&#xff0c;可以用于扩展 Qt 的功能。高级 API 用于设计插件以扩展 Qt 的功能&#xff0c;例如定制数据库驱动、图像格式、文本编码、定制样式等。Qt Designer 里大量采用了插件&#xff0c;点击 Qt Creator 的“Help”-…...

【C语言】扫雷游戏(一)

我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。 1&#xff0c;可以用数组存放&#xff0c;如果有雷就用1表示&#xff0c;没雷就用0表示。 2&#xff0c;排查(2,5)这个坐标时&#xff0c;我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时&#xf…...

ESP32-S3模组上跑通ES8388(12)

接前一篇文章&#xff1a;ESP32-S3模组上跑通ES8388&#xff08;11&#xff09; 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第5段代码&#xff0c;本回继续往下解析。为了便于理解和回顾&#xff0c;再次贴出es8388_init函数源码&#xff0c;在…...

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球…...

【论文笔记】A Token-level Contrastive Framework for Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: A Token-level Contrastiv…...

多线程篇-9--锁的使用及分类(可重入锁,读写锁,锁降级,死锁,LockSupport,乐观锁,悲观锁,分段锁等)

1、锁的概述 Java 中&#xff0c;锁是一种用于控制多线程并发访问共享资源的机制。合理的锁机制可以确保线程安全&#xff0c;避免数据竞争和不一致的问题。 Java 提供了多种锁机制&#xff0c;包括内置锁&#xff08;即 synchronized 关键字&#xff09;、显式锁&#xff08;…...

提升阅读体验,Balabolka让文字跃然“声”上

作为一个专业的语音合成工具&#xff0c;Balabolka为用户提供了全方位的文本朗读解决方案。这款软件不仅可以将各类文本实时转换为清晰的语音输出&#xff0c;还能将转换后的音频内容导出为多种主流格式。它强大的兼容性使其能够处理各类电子书和文档格式&#xff0c;让用户可以…...

【汇编语言】call 和 ret 指令(三) —— 深度解析汇编语言中的批量数据传递与寄存器冲突

文章目录 前言1. 批量数据的传递1.1 存在的问题1.2 如何解决这个问题1.3 示例演示1.3.1 问题说明1.3.2 程序实现 2. 寄存器冲突问题的引入2.1 问题引入2.2 分析与解决问题2.2.1 字符串定义方式2.2.2 分析子程序功能2.2.3 得到子程序代码 2.3 子程序的应用2.3.1 示例12.3.2 示例…...

嵌入式C编程:宏定义与typedef的深入对比与应用

目录 一、宏定义&#xff08;Macro Definition&#xff09; 1.1. 特点与应用 1.1.1 定义常量 1.1.2 定义函数式宏 1.1.3 条件编译 1.2. 作用范围和生命周期方面 1.3. 应用注意事项 二、typedef 2.1. 特点与应用 2.1.1 简化类型声明 2.1.2 提高代码可读性 2.1.3 实现…...

算法复杂度

目录&#xff1a; 算法的效率时间复杂度 1.算法的效率 1.1旋转数组习题分析 如何衡量一个算法的好坏呢&#xff1f; 案例&#xff1a;旋转数组&#xff08;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09;&#xff09; 思路&#xff1a;循环k次将所有元素向后移动一…...

时序约束进阶六:Set_Clock_Groups详解

目录 一、前言 二、时钟间关系 2.1 时钟关系分类 2.2 时钟关系查看 三、set_clock_groups设置 3.1 使用格式 3.2 优先级 3.3 约束设置示例 3.4 约束效果查看 四、Exclusive差异说明 4.1 Asynchronous 4.2 Logically_exclusive与Physically_exclusive 4.3 logical…...

《运放秘籍》第二部:仪表放大器专项知识点总结

一、差分放大器与仪表放大器的讨论 1.1. 仪放的前世今生——差分放大器原理&#xff1f; 1.2. 差分放大的原理 1.3. 差分放大器检测电流 1.4. 差分放大器端一&#xff1a;输入阻抗 1.5. 差分放大器端二&#xff1a;共模抑制比 1.6. 为什么关注输入阻抗&#xff1f;共模抑…...

JavaSE——异常

一、异常的概念 在Java中&#xff0c;将程序执行中发生的不正常行为称为"异常"&#xff0c;开发过程中的语法错误和逻辑错误不是异常。 主要分为以下两大类&#xff1a; Error(错误)&#xff1a;Java虚拟机无法解决的严重问题&#xff0c;是严重错误&#xff0c;程序…...

HormonyOS: 图形变换之Rotate

官网地址&#xff1a;rotate 1. 概述 rotate是鸿蒙系统为组件提供的旋转属性&#xff0c;通过rotate属性&#xff0c;可实现组件的旋转效果 2. rotate属性 2.1. 语法参数 rotate(value: RotateOptions) 参数&#xff1a; 参数名 类型 必填 说明 value RotateOptions…...

【Solidity】入门指南:智能合约开发基础

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Solidity入门指南&#xff1a;智能合约开发基础引言1. 开发环境搭建1.1 Remix I…...

HTMLHTML5革命:构建现代网页的终极指南 - 3. 开发工具选择

HTML&HTML5革命&#xff1a;构建现代网页的终极指南 3. 开发工具选择 大家好&#xff0c;我是莫离老师。 前两节课我们学习了 HTML 的基础概念和 HTML5 的主要特性&#xff0c;为接下来的实际开发奠定了理论基础。 今天&#xff0c;我们将讨论开发工具的选择问题。 选择合…...

智能设备安全隐患:五项关键解决措施

目前&#xff0c;我们的智能设备越来越多&#xff0c;而背后的物联网&#xff08;IoT&#xff09;安全像一面隐形的盾牌&#xff0c;默默地守护着我们周围那些复杂连网的设备。 为了让大家更加明白这些安全协议和操作是如何高效运作的&#xff0c;我们有必要深入探讨物联网安全…...

Android NDK开发 JNI 基础

在android 系统开发中 ndk开发是很重要的内容。ndk开发中 jni 是基础。 目录 一&#xff0e;什么是JNI 二. 如何使用JNI 1.Java 代码如何调用 c/c 代码 2. c/c如何调用 java 函数 一&#xff0e;什么是JNI JNI——Java Native Interface&#xff0c;它是Java平台的一个特…...

嵌入式linux之文件系统管理

嵌入式Linux文件系统的管理涉及多个方面&#xff0c;包括文件系统的创建、配置、维护以及优化。以下是一些关键点和实践技巧&#xff1a; 文件系统的创建与配置 选择合适的文件系统&#xff1a;根据应用需求&#xff08;如读写频率、存储介质类型等&#xff09;选择最合适的文…...

Y20030029 微信+SPRINGBOOT+MYSQL+LW+传统文化展示小程序的设计与实现 源代码 配置 文档

传统文化展示小程序 1.项目描述2. 课题开发的背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 基于微信小程序的传统文化展示小程序是一个集合了多种传统文化元素与现代化技术的创新平台。它充分利用了微信小程序的便捷性和普及性&#xff0c;为广大用户提供了一个深入了…...

【LC】3232. 判断是否可以赢得数字游戏

题目描述&#xff1a; 给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中&#xff0c;Alice 可以从 nums 中选择所有个位数 或 所有两位数&#xff0c;剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和&#xff0c;则 Alice 获胜。如果…...

【人工智能基础03】机器学习(练习题)

文章目录 课本习题监督学习的例子过拟合和欠拟合常见损失函数&#xff0c;判断一个损失函数的好坏无监督分类&#xff1a;kmeans无监督分类&#xff0c;Kmeans 三分类问题变换距离函数选择不同的起始点 重点回顾1. 监督学习、半监督学习和无监督学习的定义2. 判断学习场景3. 监…...

C/C++每日一练:合并K个有序链表

本篇博客将探讨如何 “合并K个有序链表” 这一经典问题。本文将从题目要求、解题思路、过程解析和相关知识点逐步展开&#xff0c;同时提供详细注释的代码示例。 链表&#xff08;Linked List&#xff09; 链表是一种线性数据结构&#xff0c;由一系列节点&#xff08;Node&…...

jmeter基础07_组件的层级

课程大纲 1. 优先级/执行顺序&#xff08;一般情况&#xff09; 同级组件&#xff1a;按组件先后顺序执行。如&#xff1a;同一层的线程组、同一层的http请求。 上下级组件&#xff1a;先执行外层&#xff08;上级&#xff09;&#xff0c;再执行内层&#xff08;下级&#xff…...

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像 1. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法一2. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法二3. qnx 侧 分区透传Android 配置3.1 配置分区透传3.2 Android 侧分区 rename3.3 创建挂载目…...

大R玩家流失预测在休闲社交游戏中的应用

摘要 预测玩家何时会离开游戏为延长玩家生命周期和增加收入贡献创造了独特的机会。玩家可以被激励留下来&#xff0c;战略性地与公司组合中的其他游戏交叉链接&#xff0c;或者作为最后的手段&#xff0c;通过游戏内广告传递给其他公司。本文重点预测休闲社交游戏中高价值玩家…...

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…...

【C++】printf 函数详解与格式化输出控制

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;printf 基础用法1.1 printf 的常见占位符1.2 占位符与参数的对应关系1.3 换行控制示例&#xff1a; &#x1f4af;格式化输出控制2.1 输出宽度控制2.1.1 指定最小宽度 2.2 …...

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(1)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现四、strcpy的使用和模拟实现五、strcat的使用和模拟实现六、strcmp的使用和…...

【专题】存储器管理

1. 存储器的层次结构 在计算机执行时&#xff0c;几乎每一条指令都涉及对存储器的访问&#xff0c;因此要求对存储器的访问速度能跟得上处理机的运行速度。 存储器的速度必须非常快&#xff0c;能与处理机的速度相匹配&#xff0c;否则会明显地影响到处理机的运行。 此外还要求…...

python股票数据分析(Pandas)练习

需求&#xff1a; 使用pandas读取一个CSV文件&#xff0c;文件内容包括股票名称、价格和交易量。完成以下任务&#xff1a; 找出价格最高的股票&#xff1b; 计算总交易量&#xff1b; 绘制价格折线图。 代码实现&#xff1a; import pandas as pd import matplotlib.pyplot …...

Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署

文章目录 前言一、部署规划二、Hadoop HA集群部署&#xff08;手动部署&#xff09;1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 …...

抗干扰设计的检查细则

抗干扰设计是确保电子系统或设备在复杂电磁环境中稳定运行的重要环节&#xff0c;涉及多个方面的设计和实施。以下是对抗干扰设计的检查细则的详细归纳&#xff1a; 一、电源线与地线设计 电源线设计&#xff1a;选择合适的电源&#xff0c;尽量加宽电源线&#xff0c;保证电源…...

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…...

React的ts文件中通过createElement拼接一段内容出来

比如接口返回一个值 const values [23.00, 40.00/kg];想做到如下效果&#xff0c; 如果单纯的用render渲染会很简单&#xff0c; 但是在ts文件中处理&#xff0c;所以采用了createElement拼接 代码如下&#xff1a; format: (values: string[]) > {if (!values || !val…...

【Git系列】Git 提交历史分析:深入理解`git log`命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

深度学习笔记——生成对抗网络GAN

本文详细介绍早期生成式AI的代表性模型&#xff1a;生成对抗网络GAN。 文章目录 一、基本结构生成器判别器 二、损失函数判别器生成器交替优化目标函数 三、GAN 的训练过程训练流程概述训练流程步骤1. 初始化参数和超参数2. 定义损失函数3. 训练过程的迭代判别器训练步骤生成器…...

《地球科学与环境学报》

《地球科学与环境学报》报道范围涵盖基础地质、矿产地质、水资源与环境、工程地质、地球物理、地球信息科学等领域&#xff0c;刊载国内外未公开发表的有创新性或意义重大的研究论文和综述文章。   来稿必须包括以下项目&#xff1a;题名&#xff08;尽可能不要超过20字&…...

k8s 1.28 聚合层部署信息记录

–requestheader-client-ca-file –requestheader-allowed-namesfront-proxy-client –requestheader-extra-headers-prefixX-Remote-Extra- –requestheader-group-headersX-Remote-Group –requestheader-username-headersX-Remote-User –proxy-client-cert-file –proxy-cl…...

组件化设计的意义

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司开发的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持多种智能终端设备&#xff0c;还能够实现跨设备之间的协同工作。为了满足不同设备的资源能力和业务需求&#xff0c;鸿蒙操作系统采用了组件化的设计方…...

2025 年河北省职业院校大数据应用与 服务(中职组)赛项样题

— 1 — 2025 年河北省职业院校大数据应用与 服务&#xff08;中职组&#xff09;赛项样题 一、背景描述 近年来&#xff0c;随着旅游业的快速发展和社交媒体的普及&#xff0c;一 些目的地因其独特的魅力或者事件而迅速走红&#xff0c;吸引了大量 游客涌入&#xff0c;使得当…...

宏集eXware物联网网关在水务管理系统上的应用

一、前言 水务管理系统涵盖了对城市水网、供水、排水、污水处理等多个环节的监控与管理。随着物联网&#xff08;IoT&#xff09;技术的快速发展&#xff0c;物联网网关逐渐成为水务管理系统中的关键组成部分。 宏集物联网网关以其高效的数据采集、传输和管理功能&#xff0c…...

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、算法思想 细节问题 &#x1f4da;左右临界 &#x1f4da;中点选择 &#x1f4da;…...

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时&#xff1a;可能会出现以下报错&#xff1a; This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…...

MongoDB聚合操作

1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档&#xff0c;可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类&#xff1a;单一作用聚合、聚合管道、MapReduce。 单一作用聚合&#xff1a;提供了对常见聚合过程的简单访问&#xff0c…...

Apple雷电5到底有多快?

在科技日新月异的今天&#xff0c;苹果公司始终走在技术创新的前沿。2023年9月12日&#xff0c;随着英特尔发布雷电5&#xff08;Thunderbolt 5&#xff09;规范&#xff0c;苹果迅速跟进&#xff0c;将其应用于自家的产品中。雷电5接口以其卓越的性能&#xff0c;彻底颠覆了我…...

项目快过:知识蒸馏 | 目标检测 |FGD | Focal and Global Knowledge Distillation for Detectors

公开时间&#xff1a;2022年3月9号 项目地址&#xff1a;https://github.com/yzd-v/FGD 论文地址&#xff1a;https://arxiv.org/pdf/2111.11837 知识蒸馏已成功地应用于图像分类。然而&#xff0c;目标检测要复杂得多&#xff0c;大多数知识蒸馏方法都失败了。本文指出&#…...

Spring Boot日志总结

文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…...

PostgreSQL最常用数据类型-重点说明自增主键处理

简介 PostgreSQL提供了非常丰富的数据类型&#xff0c;我们平常使用最多的基本就3类&#xff1a; 数字类型字符类型时间类型 这篇文章重点介绍这3中类型&#xff0c;因为对于高并发项目还是推荐&#xff1a;尽量使用简单类型&#xff0c;把运算和逻辑放在应用中&#xff0c;…...

androidstudio 最新继承 proto kts 方式

在Android Studio中&#xff0c;如果你使用的是Kotlin DSL&#xff08;.kts文件&#xff09;来配置你的Gradle项目&#xff0c;并且你想集成Protocol Buffers&#xff08;Proto&#xff09;&#xff0c;你需要稍微调整你的配置方式。以下是如何在Kotlin DSL中配置Proto集成的步…...