Qt6相对Qt5的主要提升(AI总结)
我:
Qt 6 相对于5 有哪些新功能?

Qt 6 相对于 Qt 5 有诸多新功能和改进,以下是主要的新增特性:
1. 架构和核心库的重构
-
模块化设计:Qt 6 采用了更加灵活的模块化设计,开发者可以按需引入必要的功能模块,而不必加载所有库,降低了项目体积,提高了构建效率。
-
C++17 和 C++20 支持:Qt 6 全面支持 C++17,并部分支持 C++20,利用现代 C++ 特性,如结构化绑定、
if constexpr和自动内存管理等,让代码更简洁、性能更高。 -
新的属性和绑定系统:引入了 QProperty 系统,通过 C++ 中的绑定支持提高代码速度,并与 QObject 无缝集成。
2. 图形渲染和 3D 支持
-
渲染硬件接口(RHI):Qt 6 引入了全新的 RHI,为不同的图形 API(如 OpenGL、Direct3D、Vulkan 和 Metal)提供统一的抽象接口,使得 Qt 应用能够在不同平台上轻松利用硬件加速渲染。
-
Qt Quick 3D:对 QtQuick 3D 的底层渲染管线进行了优化,支持多种 3D 渲染效果,增强了光照、纹理和材质处理能力。
-
3D 粒子系统:在 Qt Quick 3D 或 Qt Design Studio 中可以自定义 3D 粒子。
3. 多媒体模块的改进
-
Qt Multimedia 重构:Qt 6 对多媒体模块进行了彻底重构,支持更多现代多媒体格式,并引入了硬件加速,提高了音频和视频处理的效率。
4. 用户界面和输入支持
-
高 DPI 支持:Qt 6 进一步增强了对高分辨率屏幕的支持,自动调整 UI 元素和文本的尺寸与比例。
-
输入系统改进:提升了对多点触控和手势的支持,增强了对游戏手柄等外部设备的支持。
5. 并发和性能优化
-
并发 API 的改进:Qt 6 改进了并发 API,支持多核 CPU 和并行计算,能够自动根据硬件进行线程数量管理。
6. 开发工具和构建系统
-
CMake 支持:Qt 6 提供了对 CMake 构建系统的更好支持,建议新项目使用 CMake。
-
Qt Creator 改进:Qt Creator 增加了对 Qt 6 新特性的支持,并提供了更强大的代码编辑和调试工具。
7. 其他改进
-
Qt Quick Controls 2:提供了像素级完美、原生外观的控件,无缝集成到操作系统。
-
网络功能改进:允许创建自定义通信后端,并将其集成到默认的 Qt 工作流中。
这些新功能和改进让 Qt 6 在性能、现代图形 API 支持、多媒体处理和跨平台兼容性方面都得到了显著提升。
我:
新的属性和绑定系统:引入了 QProperty 系统,通过 C++ 中的绑定支持提高代码速度,并与 QObject 无缝集成。 展开详细说说,具体使用方法

Qt 6 中引入的 QProperty 系统是其新属性和绑定系统的核心,它通过 C++ 的绑定支持提高了代码速度,并与 QObject 无缝集成。以下是关于 QProperty 系统的具体使用方法和特点:
1. 基本概念
QProperty 是 Qt 6 中引入的一个模板类,用于定义和管理对象的属性。它类似于 Qt 5 中的 Q_PROPERTY 宏,但提供了更强大的功能和更好的性能。
2. 声明和定义属性
在 Qt 6 中,可以通过 QProperty 在类中声明属性。以下是一个简单的例子:
cpp复制
#include <QObject>
#include <QProperty>class MyClass : public QObject
{Q_OBJECT
public:MyClass(QObject *parent = nullptr) : QObject(parent), m_value(0) {}Q_PROPERTY(int value MEMBER m_value NOTIFY valueChanged)signals:void valueChanged();
private:int m_value;
};
在这个例子中:
-
使用
Q_PROPERTY宏声明了一个名为value的属性。 -
使用
MEMBER关键字将属性与类的成员变量m_value绑定。 -
定义了一个
valueChanged信号,用于在属性值改变时发出通知。
3. 使用 QProperty 读取和设置属性值
QProperty 提供了直接访问属性值的方法,而无需显式调用 READ 或 WRITE 函数。例如:
cpp复制
MyClass obj;
obj.value = 42; // 设置属性值
int currentValue = obj.value; // 获取属性值
这种方式类似于直接操作成员变量,但仍然保留了属性系统的所有功能。
4. 属性值改变的通知机制
当属性值发生变化时,可以通过 NOTIFY 关键字指定的信号通知其他对象。例如:
cpp复制
MyClass obj;
QObject::connect(&obj, &MyClass::valueChanged, [](){qDebug() << "Value changed!";
});
obj.value = 100; // 触发 valueChanged 信号
这种方式使得属性值的变化可以被其他对象轻松捕获。
5. 在 QML 中使用 QProperty
QProperty 系统与 QML 的集成非常紧密。在 QML 中可以直接绑定 QProperty 声明的属性,从而实现 C++ 后端与 QML 前端的无缝通信。例如:
qml复制
import QtQuick 2.0
Item {id: myItemproperty int myValue: myObject.valueComponent.onCompleted: {var myObject = new MyClass()}
}
这种方式使得 QML 可以直接访问和操作 C++ 类的属性。
6. 性能优化
QProperty 系统通过 C++ 的绑定支持提高了代码速度。它利用现代 C++ 特性(如 constexpr 和模板元编程)减少了运行时的开销,同时保持了 Qt 属性系统的灵活性。
7. 动态属性
除了静态声明的属性,QProperty 也支持动态属性。可以在运行时为对象添加属性,而无需在类定义中预先声明。
总结
QProperty 系统是 Qt 6 中一个重要的改进,它不仅提供了更高效的属性管理和通知机制,还与 QML 和信号槽机制无缝集成。通过 QProperty,开发者可以更轻松地实现属性的动态访问和绑定,同时享受性能优化带来的好处。
我:
并发和性能优化 并发 API 的改进:Qt 6 改进了并发 API,支持多核 CPU 和并行计算,能够自动根据硬件进行线程数量管理。 展开详细说说

Qt 6 在并发和性能优化方面进行了显著改进,特别是在并发 API 的增强上,这些改进使得 Qt 6 能够更好地利用多核 CPU 和并行计算能力,从而提升应用程序的性能和响应速度。以下是 Qt 6 在并发和性能优化方面的具体改进和使用方法:
1. 新的并发模块:Qt Concurrent
Qt 6 引入了新的 Qt Concurrent 模块,该模块提供了更强大和灵活的并发编程支持。Qt Concurrent 的目标是简化多线程编程,让开发者更容易地实现并行计算。
1.1 并行算法
Qt 6 的 Qt Concurrent 模块提供了类似于 C++17 标准库中的并行算法支持。例如,std::for_each 和 std::transform 等算法现在可以以并行方式执行。以下是一个简单的例子:
cpp复制
#include <QtConcurrent/QtConcurrent>
#include <QVector>
#include <QDebug>void processItem(int& item) {item *= 2; // 示例操作
}int main() {QVector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 使用 QtConcurrent::for_each 并行处理数据QtConcurrent::blockingMap(data, processItem);qDebug() << "Processed data:" << data;return 0;
}
在这个例子中,QtConcurrent::blockingMap 会并行地对 data 中的每个元素调用 processItem 函数。blockingMap 是一个阻塞版本,它会等待所有线程完成后再继续执行。
1.2 并行任务
Qt 6 还提供了 QtConcurrent::run,用于并行启动任务。这些任务可以是普通的函数、Lambda 表达式或成员函数。以下是一个例子:
cpp复制
#include <QtConcurrent/QtConcurrent>
#include <QDebug>void myTask(int value) {qDebug() << "Processing value:" << value;
}int main() {// 并行启动任务QtConcurrent::run(myTask, 42);QtConcurrent::run([]() {qDebug() << "Processing lambda task";});// 阻塞等待所有任务完成QtConcurrent::blockingMap(QVector<int>{1, 2, 3}, [](int& value) {value *= 2;});return 0;
}
在这个例子中,QtConcurrent::run 会启动一个新线程来执行 myTask 函数和 Lambda 表达式。
2. 自动线程管理
Qt 6 的并发模块能够自动根据硬件配置(如 CPU 核心数)管理线程数量。这意味着开发者无需手动管理线程池的大小,Qt 会根据系统资源动态调整线程数量,以实现最佳性能。
2.1 线程池的改进
Qt 6 内部使用了一个全局线程池(QThreadPool),该线程池会根据系统的核心数自动调整线程数量。开发者可以通过 QThreadPool::globalInstance() 访问全局线程池,并对其进行配置。例如:
cpp复制
#include <QThreadPool>
#include <QDebug>int main() {// 获取全局线程池QThreadPool* pool = QThreadPool::globalInstance();// 打印当前线程池的最大线程数qDebug() << "Max thread count:" << pool->maxThreadCount();// 可以手动设置最大线程数(通常不推荐)pool->setMaxThreadCount(8);return 0;
}
默认情况下,Qt 会根据系统的 CPU 核心数自动设置线程池的最大线程数。
3. 任务依赖和同步
Qt 6 的并发模块还支持任务依赖和同步机制,这使得复杂的并行任务可以更容易地实现。例如,可以使用 QFuture 和 QFutureWatcher 来监控任务的执行状态,并在任务完成时执行后续操作。
cpp复制
#include <QtConcurrent/QtConcurrent>
#include <QFutureWatcher>
#include <QDebug>void myTask() {qDebug() << "Task is running";
}int main() {QFutureWatcher<void> watcher;// 启动任务QFuture<void> future = QtConcurrent::run(myTask);// 将任务与 QFutureWatcher 关联watcher.setFuture(future);// 连接任务完成信号QObject::connect(&watcher, &QFutureWatcher<void>::finished, []() {qDebug() << "Task finished";});return 0;
}
在这个例子中,QFutureWatcher 用于监控任务的执行状态,并在任务完成时发出信号。
4. 性能优化
Qt 6 在性能优化方面做了大量工作,特别是在多线程和并行计算方面。以下是一些关键的性能优化措施:
4.1 减少线程切换开销
Qt 6 通过优化线程池的调度算法,减少了线程切换的开销。这意味着任务可以在更短的时间内完成,从而提高应用程序的整体性能。
4.2 数据局部性优化
Qt 6 在内部对数据访问进行了优化,以提高数据局部性。这意味着线程在访问数据时,可以更高效地利用 CPU 缓存,从而减少内存访问延迟。
4.3 异步操作支持
Qt 6 提供了更好的异步操作支持,使得开发者可以更容易地实现非阻塞操作。例如,QFuture 和 QPromise 提供了一种简单的方式来处理异步任务的结果。
5. 使用示例
以下是一个完整的示例,展示了如何在 Qt 6 中使用并发 API 来实现并行计算和任务同步:
cpp复制
#include <QtConcurrent/QtConcurrent>
#include <QFutureWatcher>
#include <QVector>
#include <QDebug>void processItem(int& item) {item *= 2; // 示例操作
}void myTask() {qDebug() << "Task is running";
}int main() {// 创建数据QVector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 并行处理数据QtConcurrent::blockingMap(data, processItem);// 启动异步任务QFutureWatcher<void> watcher;QFuture<void> future = QtConcurrent::run(myTask);watcher.setFuture(future);// 监控任务完成QObject::connect(&watcher, &QFutureWatcher<void>::finished, []() {qDebug() << "Task finished";});// 打印处理后的数据qDebug() << "Processed data:" << data;return 0;
}
在这个示例中:
-
使用
QtConcurrent::blockingMap对数据进行并行处理。 -
使用
QtConcurrent::run启动一个异步任务,并通过QFutureWatcher监控任务的完成状态。
总结
Qt 6 的并发 API 改进使得多线程编程更加简单和高效。通过自动线程管理、并行算法支持、任务依赖和同步机制,Qt 6 能够充分利用多核 CPU 的计算能力,从而显著提升应用程序的性能和响应速度。开发者可以更容易地实现复杂的并行任务,而无需深入底层线程管理细节。
我:
Qt 6 进一步增强了对高分辨率屏幕的支持,具体到什么分辨率?

在 Qt 6 中,高 DPI 支持得到了显著增强,但并没有明确限定具体的分辨率上限。Qt 6 默认启用了高 DPI 缩放功能,能够自动适应各种高分辨率屏幕,包括但不限于常见的 2K、4K、甚至是更高分辨率的显示器。
Qt 6 的高 DPI 支持特点
-
自动缩放:Qt 6 默认启用高 DPI 缩放(
Qt::AA_EnableHighDpiScaling),并且无法通过代码禁用。这意味着应用程序会自动根据系统的 DPI 设置来调整界面元素的大小,以确保在高分辨率屏幕上显示清晰。 -
环境变量控制:开发者可以通过设置环境变量来进一步调整缩放行为。例如:
-
QT_SCALE_FACTOR:设置全局缩放因子。 -
QT_SCREEN_SCALE_FACTORS:为每个屏幕设置不同的缩放因子。
-
-
动态调整:Qt 6 提供了灵活的接口(如
QGuiApplication::setHighDpiScaleFactorRoundingPolicy)来动态调整缩放策略。 -
高分辨率资源支持:Qt 的资源管理器会自动加载与当前 DPI 匹配的高分辨率资源文件(如图片、图标等),以确保界面元素在高 DPI 屏幕上清晰。
支持的分辨率范围
Qt 6 的高 DPI 支持并不局限于特定的分辨率,而是能够根据系统的 DPI 设置动态调整。例如:
-
在 1920×1080 分辨率下,缩放比例可以是 100%、125%、150% 等。
-
在更高分辨率(如 3840×2160,即 4K)下,Qt 6 也能通过自动缩放保持界面元素的清晰度。
总结
Qt 6 的高 DPI 支持能够自动适应各种高分辨率屏幕,无需开发者手动设置分辨率范围。通过环境变量和动态调整接口,开发者可以进一步优化应用程序在不同屏幕上的显示效果。
我:
自动内存管理 部分展开说说,列举点示例代码

Qt 6 在自动内存管理方面进行了改进,主要体现在更智能的内存分配和释放机制,以及对现代 C++ 特性的支持。这些改进有助于减少内存泄漏和提高代码的可维护性。以下是一些关键点和示例代码,展示 Qt 6 中自动内存管理的改进。
1. 智能指针的使用
Qt 6 鼓励使用智能指针(如 std::shared_ptr 和 std::unique_ptr)来管理动态分配的内存。智能指针可以自动释放内存,从而减少内存泄漏的风险。
示例代码:使用 std::shared_ptr
cpp复制
#include <memory>
#include <iostream>class MyClass {
public:MyClass() { std::cout << "MyClass constructed\n"; }~MyClass() { std::cout << "MyClass destructed\n"; }
};int main() {// 使用 std::shared_ptr 自动管理内存std::shared_ptr<MyClass> myObject = std::make_shared<MyClass>();// 当 myObject 超出作用域时,MyClass 的析构函数会被自动调用return 0;
}
在这个例子中,std::shared_ptr 会自动管理 MyClass 的生命周期。当 myObject 超出作用域时,MyClass 的析构函数会被自动调用,释放分配的内存。
示例代码:使用 std::unique_ptr
cpp复制
#include <memory>
#include <iostream>class MyClass {
public:MyClass() { std::cout << "MyClass constructed\n"; }~MyClass() { std::cout << "MyClass destructed\n"; }
};int main() {// 使用 std::unique_ptr 自动管理内存std::unique_ptr<MyClass> myObject = std::make_unique<MyClass>();// 当 myObject 超出作用域时,MyClass 的析构函数会被自动调用return 0;
}
在这个例子中,std::unique_ptr 也自动管理 MyClass 的生命周期,确保内存被正确释放。
2. QObject 的自动内存管理
Qt 6 继续支持 QObject 的自动内存管理机制。通过将对象的父对象设置为另一个 QObject,子对象会在父对象被销毁时自动释放。
示例代码:使用 QObject 的父子关系
cpp复制
#include <QObject>
#include <QDebug>class MyObject : public QObject {Q_OBJECT
public:MyObject(QObject *parent = nullptr) : QObject(parent) {qDebug() << "MyObject constructed";}~MyObject() {qDebug() << "MyObject destructed";}
};int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);// 创建父对象QObject parent;// 创建子对象,并将其父对象设置为 parentMyObject child(&parent);// 当 parent 被销毁时,child 也会被自动销毁return app.exec();
}
在这个例子中,child 的父对象是 parent。当 parent 被销毁时,child 也会被自动销毁,从而避免了内存泄漏。
3. 使用 QScopedPointer 和 QSharedPointer
Qt 提供了自己的智能指针类 QScopedPointer 和 QSharedPointer,这些类与 Qt 的信号和槽机制以及 QObject 的父子关系机制无缝集成。
示例代码:使用 QScopedPointer
cpp复制
#include <QScopedPointer>
#include <QDebug>class MyClass {
public:MyClass() { qDebug() << "MyClass constructed"; }~MyClass() { qDebug() << "MyClass destructed"; }
};int main() {// 使用 QScopedPointer 自动管理内存QScopedPointer<MyClass> myObject(new MyClass());// 当 myObject 超出作用域时,MyClass 的析构函数会被自动调用return 0;
}
在这个例子中,QScopedPointer 会自动管理 MyClass 的生命周期,确保内存被正确释放。
示例代码:使用 QSharedPointer
cpp复制
#include <QSharedPointer>
#include <QDebug>class MyClass {
public:MyClass() { qDebug() << "MyClass constructed"; }~MyClass() { qDebug() << "MyClass destructed"; }
};int main() {// 使用 QSharedPointer 自动管理内存QSharedPointer<MyClass> myObject(new MyClass());// 当 myObject 超出作用域时,MyClass 的析构函数会被自动调用return 0;
}
在这个例子中,QSharedPointer 会自动管理 MyClass 的生命周期,确保内存被正确释放。
4. 自动内存管理的信号和槽
Qt 6 支持在信号和槽中使用智能指针,这使得信号和槽的生命周期管理更加安全。
示例代码:信号和槽中的自动内存管理
cpp复制
#include <QObject>
#include <QDebug>
#include <QSharedPointer>class MyObject : public QObject {Q_OBJECT
public:MyObject(QObject *parent = nullptr) : QObject(parent) {qDebug() << "MyObject constructed";}~MyObject() {qDebug() << "MyObject destructed";}public slots:void handleSignal(const QSharedPointer<MyObject>& obj) {qDebug() << "Received signal with object:" << obj.data();}
};int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);// 创建对象QSharedPointer<MyObject> sender(new MyObject());QSharedPointer<MyObject> receiver(new MyObject());// 连接信号和槽QObject::connect(sender.data(), &MyObject::destroyed, receiver.data(), &MyObject::handleSignal);// 销毁 sender,触发信号sender.reset();return app.exec();
}
在这个例子中,sender 和 receiver 都是 QSharedPointer 管理的对象。当 sender 被销毁时,会触发 destroyed 信号,receiver 的槽函数会被调用,同时 sender 的内存会被自动释放。
总结
Qt 6 通过支持现代 C++ 的智能指针(如 std::shared_ptr 和 std::unique_ptr)以及 Qt 自己的智能指针类(如 QScopedPointer 和 QSharedPointer),显著增强了自动内存管理功能。这些机制可以有效减少内存泄漏的风险,同时提高代码的可维护性和安全性。
相关文章:
Qt6相对Qt5的主要提升(AI总结)
我: Qt 6 相对于5 有哪些新功能? Qt 6 相对于 Qt 5 有诸多新功能和改进,以下是主要的新增特性: 1. 架构和核心库的重构 模块化设计:Qt 6 采用了更加灵活的模块化设计,开发者可以按需引入必要的功能模块&a…...
消息队列ActiveMQ、RabbitMQ、RocketMQ、Kafka对比分析和选型
ActiveMQ、RabbitMQ、RocketMQ、Kafka对比分析和选型 四大消息队列详细对比 1. ActiveMQ 核心特性: 基于JMS规范,支持多种协议(AMQP、STOPP、MQTT等)。提供主从架构(Master-Slave)和共享存储集群。支持持…...
2025:sql注入详细介绍
先说一个阿里云学生无门槛免费领一年2核4g服务器的方法: 阿里云服务器学生无门槛免费领一年2核4g_阿里云学生认证免费服务器-CSDN博客 SQL注入(SQL Injection)是一种常见的网络安全漏洞,攻击者通过在应用程序的输入参数中注入恶意…...
MyBatis操作数据库进阶——动态SQL
动态 SQL 是根据程序运行时的条件灵活生成不同 SQL 语句的技术。它的核心目的是在不修改代码 的前提下,通过条件判断、循环等逻辑,动态拼接 SQL 片段,解决传统 SQL 语句死板、难以应对复杂业务场景的问题。 一、<if> 标签 先来观…...
使用LLama-Factory的简易教程(Llama3微调案例+详细步骤)
引言:一套快速实现 Llama3 中文微调的教程 主要参考:胖虎遛二狗的 B 站教学视频《【大模型微调】使用Llama Factory实现中文llama3微调》 ✅ 笔者简介:Wang Linyong,西工大,2023级,计算机技术 研究方向&am…...
LabVIEW发电平台数据采集系统
本文详细介绍了基于LabVIEW的摇臂式波浪发电平台数据采集系统的设计与实现。通过整合LabVIEW软件与多种传感器技术,本系统能够有效提升数据采集的准确性和效率,为波浪能的利用和发电设备的优化提供科学依据。 项目背景 随着全球能源需求增长和环境保…...
气象可视化卫星云图的方式:方法与架构详解
气象卫星云图是气象预报和气候研究的重要数据来源。通过可视化技术,我们可以将卫星云图数据转化为直观的图像或动画,帮助用户更好地理解气象变化。本文将详细介绍卫星云图可视化的方法、架构和代码实现。 一、卫星云图可视化方法 1. 数据获取与预处理 卫星云图数据通常来源…...
abaqus 二次开发 No module named ‘abaqusConstants
在 Python 中遇到 “No module named ‘abaqusConstants’” 错误通常意味着 Python 无法找到名为 abaqusConstants 的模块。这可能是由以下几个原因造成的: 拼写错误:首先确认模块名是否正确。通常在 Abaqus 的 Python 环境中,正确的模块名…...
【蓝桥杯】每日练习 Day7
目录 前言 领导者 分析 代码 空调 分析 代码 面包店 分析 代码 前言 今天是第一部分的最后一天(主打记忆恢复术和锻炼思维),从明天开始主播会逐步更新从位运算到dp问题的常见题型。 领导者(分类讨论) 分析 …...
贪心算法(11)(java)加油站
题目:在一条环路上有n个加油站,其中第i个加油站有汽油 gas[i]升.。 你有一辆油箱容量无限的的汽车,从第i个加油站开往第i1个加油站需要消耗汽油 cost[i]升。你从其中的一个加油站出发,开始时油箱为空。 给定…...
Python(4)Python函数编程性能优化全指南:从基础语法到并发调优
目录 一、Lambda性能优化原理1.1 内联执行优势1.2 并行计算加速 二、工程级优化策略2.1 内存管理机制2.2 类型提示增强 三、生产环境最佳实践3.1 代码可读性平衡3.2 异常处理模式 四、性能调优案例4.1 排序算法优化4.2 数据管道加速 五、未来演进方向5.1 JIT编译优化5.2 类型系…...
本地部署Stable Diffusion生成爆火的AI图片
直接上代码 Mapping("/send") Post public Object send(Body String promptBody) { JSONObject postSend new JSONObject(); System.out.println(promptBody); JSONObject body JSONObject.parseObject(promptBody); List<S…...
qiankun微前端的使用
qiankun使用时注意以下几个点 1,子应用项目框架(react,vue)使用的打包格式需要为 umd 格式 2,子应用项目最好配置不受同源策略(跨域)的影响 3,子应用最好使用的路由模式是 histor…...
从国家能源到浙江交通投资,全息技术在能源交通领域的创新应用
一、3D全息技术行业应用参数及设计制作要求 全息投影 全息投影技术通过激光器、全息片等设备,将物体的三维信息记录下来,并在特定条件下再现。应用参数包括投影距离、投影面积、投影亮度等。设计制作要求:高清晰度、高亮度、低噪音、稳定性好…...
PageHiOffice网页组件(WebOffice文档控件)开发集成技巧专题一
PageHiOffice网页组件作为最新一代的WebOffice文档控件,这是目前市场上唯一能做到在Chrome等最新版浏览器中实现内嵌网页运行的商用文档控件,是OA及ERP等系统处理各种文档的福音。从发布到完善已经超过3年,不管是功能性还是稳定性都已经有了长…...
【人工智能】机器学习中的评价指标
机器学习中的评价指标 在机器学习中,评估指标(Evaluation Metrics)是衡量模型性能的工具。选择合适的评估指标能够帮助我们更好地理解模型的效果以及它在实际应用中的表现。 一般来说,评估指标主要分为三大类:分类、…...
本地安装deepseek大模型,并使用 python 调用
首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步,就可以 点击搜索 Models : https://ollama.com/search然后点击下载: 选择后复制: ollama run deepseek-r1:32b例如: 让它安装完成后࿱…...
Android:蓝牙设置配套设备配对
一、概述 在搭载 Android 8.0(API 级别 26)及更高版本的设备上,配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描,而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...
AI知识补全(二):提示工程(Prompting)是什么?
名人说:人生如逆旅,我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(一):tokens是什么? 目录 一、什么是提示工程?二、为什么提示工程如此重要?三、核心提示工程技术1. 少样本学习(Few-Sho…...
Python 变量作用域、global 关键字与闭包作用域深度解析 第三部分
## 三、闭包作用域的存在原因及适用场景 ### 3.1 闭包作用域存在的原因 #### 3.1.1 数据封装与隐藏 闭包可以把数据封装在外部函数的作用域中,只有内部函数能够访问这些数据,这有助于实现数据的隐藏和保护。 python def counter(): count 0 def incre…...
zookeeper使用
下载 官网 链接 1. 2. 然后解压: 启动 先复制一份这个文件, 双击启动 默认占用8080,和Tomcat冲突, 解决方法:链接 然后重启...
【性能优化点滴】odygrd/quill 中一个简单的标记位作用--降低 IO 次数
在 StreamSink 类中,成员变量 _write_occurred 的作用是 跟踪自上次刷新(Flush)以来是否有写入操作发生,其核心目的是 优化 I/O 性能。以下是详细解析: _write_occurred 的作用 1. 避免不必要的刷新(Flush…...
Java面试黄金宝典11
1. 什么是 JMM 内存模型 定义 JMM(Java Memory Model)即 Java 内存模型,它并非真实的物理内存结构,而是一种抽象的概念。其主要作用是规范 Java 虚拟机与计算机主内存(Main Memory)之间的交互方式&#x…...
使用BootStrap 3的原创的模态框组件,没法弹出!估计是原创的bug
最近在给客户开发一个CRM系统,其中用到了BOOTSTRAP的模态框。版本是3。由于是刚开始用该框架。所以在正式部署到项目中前,需要测试一下,找到框架中的如下部分。需要说明的是。我用的asp.net mvc框架开发。测试也是在asp.net mvc环境下。 复制…...
【Azure 架构师学习笔记】- Azure Networking(1) -- Service Endpoint 和 Private Endpoint
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Networking】系列。 前言 最近公司的安全部门在审计云环境安全性时经常提到service endpoint(SE)和priavate endpoint(PE)的术语,为此做了一些研究储备。 云…...
Excel第41套全国人口普查
2. 导入网页中的表格:数据-现有链接-考生文件夹:网页-找到表格-点击→变为√-导入删除外部链接关系:数据-点击链接-选中连接-删除-确定(套用表格格式-也会是删除外部链接)数值缩小10000倍(除以10000即可&am…...
VUE2导出el-table数据为excel并且按字段分多个sheet
首先在根目录下建一个文件夹export用来存储export.js import * as XLSX from xlsxfunction autoWidthFunc(ws, data) {// 设置每列的最大宽度const colWidth data.map(row > row.map(val > {var reg new RegExp([\\u4E00-\\u9FFF], g) // 检测字符串是否包含汉字if (v…...
PDF文件转Markdown,基于开源项目marker
首先我们来问下deepseek 为啥要选marker呢 基于深度学习,一看就逼格拉满。搞科研必备,效果应该不会太差。 看下官网 https://github.com/VikParuchuri/marker 一看头像是个印度佬,自吹——又快又好。那就试试吧。 安装步骤 安装…...
深入理解 HTML5 Web Workers:提升网页性能的关键技术解析
深入理解 HTML5 Web Workers:提升网页性能的关键技术解析 引言1. 什么是 Web Workers?Web Workers 的特点: 2. Web Workers 的使用方式2.1 创建一个 Web Worker步骤 1:创建 Worker 文件步骤 2:在主线程中调用 Worker 3…...
【蓝桥杯速成】| 9.回溯升级
题目一:组合综合 问题描述 39. 组合总和 - 力扣(LeetCode) 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返…...
