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

[qt5学习笔记]用vs2022(msvc2017)+copilot进行QtWidgetsApplication源码解析

一直没深入了解qt,又一段时间没写qt,重新捡起来。

开发环境

本地vs2022(msvc2017, v14.30)先升级到最新版本,方便使用copilot。
参考 VS2022+QT5环境搭建 下载 qt5.14.2

用vs的qt插件设置qt5.14.2x86路径,x64版本未安装。
创建一个默认的QtWidgetsApplication程序。

工程文件及生成关系见编译输出

1>------ 已启动全部重新生成: 项目: QtWidgetsApplication1, 配置: Debug Win32 ------
1> Qt/MSBuild: 3.3.1.1
1>Reading Qt configuration (C:/Qt/Qt5.14.2/5.14.2/msvc2017/bin/qmake)
1> Qt: 5.14.2
1>uic QtWidgetsApplication1.ui
1>rcc QtWidgetsApplication1.qrc
1>moc QtWidgetsApplication1.h
1>stdafx.cpp
1>QtWidgetsApplication1.cpp
1>main.cpp
1>qrc_QtWidgetsApplication1.cpp
1>moc_QtWidgetsApplication1.cpp
1>QtWidgetsApplication1.vcxproj -> C:\code\cpp_test\QtWidgetsApplication1\Debug\QtWidgetsApplication1.exe
========== 全部重新生成: 1 成功,0 失败,0 已跳过 ==========
========== 重新生成 于 23:35 完成,耗时 05.139==========

uic rcc moc三种自动生成的qt文件

QtWidgetsApplication1.h(有Q_OBJECT) 对应

QtWidgetsApplication1\Debug\qt\moc\moc_QtWidgetsApplication1.cpp
QtWidgetsApplication1是唯一一个界面类,头文件里面的Q_OBJECT会触发生成moc_*.cpp文件。这个moc文件需要展开说。
QtWidgetsApplication1.h关联了自动生成的ui_QtWidgetsApplication1.h文件,Ui::QtWidgetsApplication1Class类在此定义。
QtWidgetsApplication1 界面类继承QMainWindow直接获得主窗口所有技能。Q_OBJECT宏放后面展开描述。

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"class QtWidgetsApplication1 : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication1(QWidget *parent = nullptr);~QtWidgetsApplication1();private:Ui::QtWidgetsApplication1Class ui;
};

moc_QtWidgetsApplication1.cpp代码如下:

#include "…/…/…/QtWidgetsApplication1.h"确保被前置定义了。并通过编译条件自检,存在错误时,编译期会输出错误信息。
struct qt_meta_stringdata_QtWidgetsApplication1_t 存储类名的元数据。
QT_MOC_LITERAL 宏用于初始化 QByteArrayData 结构体.

moc代码使得 Qt 的信号和槽机制能够在运行时正确工作。我觉得关键点就是利用QObject派生形成界面数据树,用各种静态函数、元数据等形成自描述信息,方便qt代码在界面树中检索信号槽。

#include <memory>
#include "stdafx.h"
#include "../../../QtWidgetsApplication1.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'QtWidgetsApplication1.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.14.2. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endifQT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_QtWidgetsApplication1_t {QByteArrayData data[1];char stringdata0[22];//存储类名的元数据
};
//初始化 QByteArrayData 结构体
#define QT_MOC_LITERAL(idx, ofs, len) \Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \qptrdiff(offsetof(qt_meta_stringdata_QtWidgetsApplication1_t, stringdata0) + ofs \- idx * sizeof(QByteArrayData)) \)//静态常量,包含了类名 QtWidgetsApplication1 的元数据。
static const qt_meta_stringdata_QtWidgetsApplication1_t qt_meta_stringdata_QtWidgetsApplication1 = {{
QT_MOC_LITERAL(0, 0, 21) // "QtWidgetsApplication1"},"QtWidgetsApplication1"
};
#undef QT_MOC_LITERAL//静态常量数组 qt_meta_data_QtWidgetsApplication1,用于存储类的元数据。
//这个数组包含了类的修订版本、类名、类信息、方法、属性、枚举、构造函数、标志和信号的数量。
static const uint qt_meta_data_QtWidgetsApplication1[] = {// content:8,       // revision0,       // classname0,    0, // classinfo0,    0, // methods0,    0, // properties0,    0, // enums/sets0,    0, // constructors0,       // flags0,       // signalCount0        // eod
};//静态成员函数,用于处理元对象系统的调用
void QtWidgetsApplication1::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{Q_UNUSED(_o);Q_UNUSED(_id);Q_UNUSED(_c);Q_UNUSED(_a);
}//静态常量 QMetaObject,用于存储类的元对象信息。
//它包含了父类的元对象(QMainWindow::staticMetaObject)、类名的元数据、类的元数据、静态元调用函数和其他一些指针。
QT_INIT_METAOBJECT const QMetaObject QtWidgetsApplication1::staticMetaObject = { {QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(),qt_meta_stringdata_QtWidgetsApplication1.data,qt_meta_data_QtWidgetsApplication1,qt_static_metacall,nullptr,nullptr
} };//metaObject 函数返回类的元对象。
//如果对象有动态元对象,则返回动态元对象;
//否则,返回静态元对象。
const QMetaObject *QtWidgetsApplication1::metaObject() const
{return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}//qt_metacast 函数用于在运行时进行类型转换。
//如果传入的类名与 QtWidgetsApplication1 匹配,则返回当前对象的指针;
//否则,调用父类的 qt_metacast 函数。
void *QtWidgetsApplication1::qt_metacast(const char *_clname)
{if (!_clname) return nullptr;if (!strcmp(_clname, qt_meta_stringdata_QtWidgetsApplication1.stringdata0))return static_cast<void*>(this);return QMainWindow::qt_metacast(_clname);
}//qt_metacall 函数用于处理元对象系统的调用。
//在这个例子中,它调用父类的 qt_metacall 函数,并返回调用的 ID。
int QtWidgetsApplication1::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{_id = QMainWindow::qt_metacall(_c, _id, _a);return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

QtWidgetsApplication1.qrc 对应

QtWidgetsApplication1\Debug\qt\rcc\qrc_QtWidgetsApplication1.cpp
QtWidgetsApplication1.qrc 是一个xml片段文件,用于描述资源文件数据集,方便程序访问资源文件。

<RCC><qresource prefix="/QtWidgetsApplication1"><file>QtWidgetsApplication1.ico</file></qresource>
</RCC>

生成的主要代码如下:
关键点是当前qrc cpp编译单元中有一个全局对象struct initializer dummy;这个对象会利用cpp的构造析构函数调用全局init和cleanup函数,避免手工编码管理资源文件相关的内存。

int QT_RCC_MANGLE_NAMESPACE(qInitResources_QtWidgetsApplication1)();
int QT_RCC_MANGLE_NAMESPACE(qInitResources_QtWidgetsApplication1)()
{return 1;
}int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_QtWidgetsApplication1)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_QtWidgetsApplication1)()
{return 1;
}namespace {struct initializer {initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_QtWidgetsApplication1)(); }~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_QtWidgetsApplication1)(); }} dummy;
}

QtWidgetsApplication1.ui 对应

QtWidgetsApplication1\Debug\qt\uic\ui_QtWidgetsApplication1.h
QtWidgetsApplication1.ui 也是一个xml片段文件,用来描述界面,例如尺寸、内容、布局等。
需要注意的是,ui文件关联了qrc resources文件。

<UI version="4.0" ><class>QtWidgetsApplication1Class</class><widget class="QMainWindow" name="QtWidgetsApplication1Class" ><property name="objectName" ><string notr="true">QtWidgetsApplication1Class</string></property><property name="geometry" ><rect><x>0</x><y>0</y><width>600</width><height>400</height></rect></property><property name="windowTitle" ><string>QtWidgetsApplication1</string></property>  <widget class="QMenuBar" name="menuBar" /><widget class="QToolBar" name="mainToolBar" /><widget class="QWidget" name="centralWidget" /><widget class="QStatusBar" name="statusBar" /></widget><layoutDefault spacing="6" margin="11" /><pixmapfunction></pixmapfunction><resources><include location="QtWidgetsApplication1.qrc"/></resources><connections/>
</UI>

ui文件对应的ui h文件内容如下:
setupUi 方法设置用户界面
retranslateUi 方法翻译用户界面
Ui::QtWidgetsApplication1Class 类继承自 Ui_QtWidgetsApplication1Class,简化了用户代码的使用。

class Ui_QtWidgetsApplication1Class
{
public:QMenuBar *menuBar;QToolBar *mainToolBar;QWidget *centralWidget;QStatusBar *statusBar;void setupUi(QMainWindow *QtWidgetsApplication1Class){if (QtWidgetsApplication1Class->objectName().isEmpty())QtWidgetsApplication1Class->setObjectName(QString::fromUtf8("QtWidgetsApplication1Class"));QtWidgetsApplication1Class->resize(600, 400);menuBar = new QMenuBar(QtWidgetsApplication1Class);menuBar->setObjectName(QString::fromUtf8("menuBar"));QtWidgetsApplication1Class->setMenuBar(menuBar);mainToolBar = new QToolBar(QtWidgetsApplication1Class);mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));QtWidgetsApplication1Class->addToolBar(mainToolBar);centralWidget = new QWidget(QtWidgetsApplication1Class);centralWidget->setObjectName(QString::fromUtf8("centralWidget"));QtWidgetsApplication1Class->setCentralWidget(centralWidget);statusBar = new QStatusBar(QtWidgetsApplication1Class);statusBar->setObjectName(QString::fromUtf8("statusBar"));QtWidgetsApplication1Class->setStatusBar(statusBar);retranslateUi(QtWidgetsApplication1Class);QMetaObject::connectSlotsByName(QtWidgetsApplication1Class);} // setupUivoid retranslateUi(QMainWindow *QtWidgetsApplication1Class){QtWidgetsApplication1Class->setWindowTitle(QCoreApplication::translate("QtWidgetsApplication1Class", "QtWidgetsApplication1", nullptr));} // retranslateUi};namespace Ui {class QtWidgetsApplication1Class: public Ui_QtWidgetsApplication1Class {};
} // namespace Ui

编译生成的qt环境信息:

QT_SYSROOT:
QT_INSTALL_PREFIX:C:/Qt/Qt5.14.2/5.14.2/msvc2017
QT_INSTALL_ARCHDATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017
QT_INSTALL_DATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017
QT_INSTALL_DOCS:C:/Qt/Qt5.14.2/Docs/Qt-5.14.2
QT_INSTALL_HEADERS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/include
QT_INSTALL_LIBS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/lib
QT_INSTALL_LIBEXECS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/bin
QT_INSTALL_BINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/bin
QT_INSTALL_TESTS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/tests
QT_INSTALL_PLUGINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/plugins
QT_INSTALL_IMPORTS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/imports
QT_INSTALL_QML:C:/Qt/Qt5.14.2/5.14.2/msvc2017/qml
QT_INSTALL_TRANSLATIONS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:C:/Qt/Qt5.14.2/Examples/Qt-5.14.2
QT_INSTALL_DEMOS:C:/Qt/Qt5.14.2/Examples/Qt-5.14.2
QT_HOST_PREFIX:C:/Qt/Qt5.14.2/5.14.2/msvc2017
QT_HOST_DATA:C:/Qt/Qt5.14.2/5.14.2/msvc2017
QT_HOST_BINS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/bin
QT_HOST_LIBS:C:/Qt/Qt5.14.2/5.14.2/msvc2017/lib
QMAKE_SPEC:win32-msvc
QMAKE_XSPEC:win32-msvc
QMAKE_VERSION:3.1
QT_VERSION:5.14.2

在stdafx.h中只有#include
默认加载的qt库:QT = core gui widgets

main.cpp

Qt 应用程序的入口点。
main之前的初始化过程由编译期生成。

#include "stdafx.h"
#include "QtWidgetsApplication1.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{//QApplication 对象负责管理应用程序的控制流和主要设置。//它处理窗口系统的初始化、事件循环的启动和管理、以及应用程序级别的设置。QApplication a(argc, argv);//Qt 应用程序的基础对象//应用程序的主窗口类.调用 setupUi 方法来初始化用户界面组件QtWidgetsApplication1 w;w.show();//将窗口显示在屏幕上,并使其可见。//a.exec()启动应用程序的事件循环//事件循环会一直运行,直到调用 QApplication::quit() 或关闭所有窗口。return a.exec();
}

QApplication 对象 a 和 QtWidgetsApplication1 对象 w 之间的关联和交互主要通过以下方式实现:

  1. 事件循环管理:
    • QApplication 对象 a 负责管理整个应用程序的事件循环。所有的用户事件(如按键、鼠标点击等)都会通过 QApplication 对象传递给相应的窗口和控件。
    • 当用户与 QtWidgetsApplication1 窗口 w 进行交互时,这些事件会被 QApplication 对象捕获并分发给 w 进行处理。
  2. 窗口管理:
    • QApplication 对象 a 负责管理应用程序中的所有窗口,包括 QtWidgetsApplication1 窗口 w。它确保窗口的创建、显示和关闭都能正确处理。
    • QApplication 对象还负责处理窗口之间的焦点切换、窗口的最小化和最大化等操作。
  3. 信号和槽机制:
    • QApplication 对象 a 负责管理信号和槽的连接和分发。当某个信号被触发时,QApplication 对象会调用相应的槽函数来处理该信号。

qApp 是一个全局指针,指向当前应用程序的唯一实例 QApplication 对象。

QApplication 的构造函数会将 a 的指针存储在 QCoreApplication 的静态成员变量中,这样 QCoreApplication::instance() 就可以返回这个指针。

通过qApp 就可以遍历整个当前app进程的界面数据

通过 qApp 可以遍历整个当前应用程序的界面数据。
qApp 是一个全局指针,指向当前应用程序的唯一实例 QApplication 或 QGuiApplication 对象。
通过 qApp,你可以访问和操作应用程序的许多全局属性和方法,包括所有窗口和控件。

访问所有窗口
QGuiApplication 提供了几个静态方法,可以用来获取应用程序中的所有窗口:
• QGuiApplication::allWindows(): 返回应用程序中所有窗口的列表。
• QGuiApplication::topLevelWindows(): 返回应用程序中所有顶级窗口的列表。

访问焦点窗口和对象
• QGuiApplication::focusWindow(): 返回当前具有焦点的窗口。
• QGuiApplication::focusObject(): 返回当前具有焦点的对象。

访问屏幕信息
• QGuiApplication::primaryScreen(): 返回主屏幕对象。
• QGuiApplication::screens(): 返回所有屏幕的列表。
• QGuiApplication::screenAt(const QPoint &point): 返回指定点所在的屏幕。

用QObject构成类定义树,用qApp构成进程数据树

个人觉得,用QObject构成类定义树,用qApp构成进程数据树,这是qt的核心设计理念。
信号和槽机制 (Signals and Slots),通过信号(字符串或其它注册key)查找调用函数,实现了松耦合(解耦合)。直接调用函数属于紧耦合关系。

connect(senderObject, &SenderClass::signalName, receiverObject, &ReceiverClass::slotName);

Qt 的元对象系统支持运行时类型信息、信号和槽机制、属性系统等。QObject 类及其子类都支持元对象系统。
本质是通过moc自动生成自描述信息,挂接到qt类体系和运行时数据体系中。

Qt 是一个事件驱动的框架,所有的用户交互(如按键、鼠标点击等)都会生成事件,并通过事件循环进行处理。QApplication 对象负责管理事件循环。界面程序似乎都具备这个特性。

Qt 支持插件机制,允许开发者动态加载和使用插件。QPluginLoader 类用于加载插件,
QFactoryInterface 类用于定义插件接口。

Qt 提供了强大的国际化和本地化支持,允许开发者为应用程序提供多语言支持。QTranslator 类用于加载翻译文件,tr() 函数用于标记需要翻译的字符串。

模型-视图-控制器 (Model-View-Controller, MVC) 模式

Qt 提供了丰富的模型-视图框架,用于实现数据与用户界面之间的分离。QAbstractItemModel 是模型的基类,QListView、QTableView 等是视图的基类。然后通过信号和槽进行控制。

QStandardItemModel *model = new QStandardItemModel();
QListView *view = new QListView();
view->setModel(model);// 添加控制逻辑,例如信号和槽的连接
connect(view, &QListView::clicked, this, &QtWidgetsApplication1::onItemClicked);

相关文章:

[qt5学习笔记]用vs2022(msvc2017)+copilot进行QtWidgetsApplication源码解析

一直没深入了解qt&#xff0c;又一段时间没写qt&#xff0c;重新捡起来。 开发环境 本地vs2022(msvc2017, v14.30)先升级到最新版本&#xff0c;方便使用copilot。 参考 VS2022QT5环境搭建 下载 qt5.14.2 用vs的qt插件设置qt5.14.2x86路径&#xff0c;x64版本未安装。 创建一…...

Nginx--日志(介绍、配置、日志轮转)

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx日志介绍 nginx 有一个非常灵活的日志记录模式&#xff0c;每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的…...

Transformer 模型介绍(一)——综述

Transformer 是一种完全基于注意力机制的神经网络模型&#xff0c;首次在2017年的论文《Attention Is All You Need》中提出。该模型最初用于机器翻译任务&#xff0c;并在特定任务中表现优于谷歌的其他神经网络机器翻译模型。Transformer 也是 Seq2Seq&#xff08;序列到序列&…...

Ceph集群搭建2025(squid版)

squid版本维护年限 apt install -y cephadmecho >> "deb http://mirrors.163.com/ceph/debian-squid/ bookworm main" echo >> "deb-src http://mirrors.163.com/ceph/debian-squid/ bookworm main"#安装源 cephadm install #开始初始化一个最…...

封装neo4j的持久层和服务层

目录 持久层 mp 模仿&#xff1a; 1.抽取出通用的接口类 2.创建自定义的repository接口 服务层 mp 模仿&#xff1a; 1.抽取出一个IService通用服务类 2.创建ServiceImpl类实现IService接口 3.自定义的服务接口 4.创建自定义的服务类 工厂模式 为什么可以使用工厂…...

HTML 简介

1.什么是 HTML&#xff1f; 超文本&#xff1a;暂且简单理解为 “超级的文本”&#xff0c;和普通文本比&#xff0c;内容更丰富。 标 记&#xff1a;文本要变成超文本&#xff0c;就需要用到各种标记符号。 语 言&#xff1a;每一个标记的写法、读音、使用规则&#xff0c…...

【AWS】EC2 安全组设置

在使用 Amazon Web Services (AWS) 的 EC2 实例时&#xff0c;很多用户会遇到关于 安全组 设置的问题&#xff0c;尤其是在创建或修改安全组时输入描述信息时。最近&#xff0c;有一个常见的错误是当用户在 EC2 安全组 配置中添加描述时&#xff0c;使用了中文字符&#xff0c;…...

git bisect 使用二分法查找引入错误的提交

git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时&#xff0c;首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...

STM32 Flash详解教程文章

目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易&#xff0c;请勿搬运&#xff0c;感谢理解&#xff01;&#xff01;&#xff01; Flash基本概念…...

业务开发 | 基础知识 | Maven 快速入门

Maven 快速入门 1.Maven 全面概述 Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念&#xff08;POM&#xff09;&#xff0c;Maven 可以从中央信息中管理项目的构建&#xff0c;报告和文档。 2.Maven 基本功能 因此实际上 Maven 的基本功能就是作为 Ja…...

Python实现从SMS-Activate平台,自动获取手机号和验证码(进阶版2.0)

前言 本文是该专栏的第52篇,后面会持续分享python的各种干货知识,值得关注。 在本专栏之前,笔者在文章《Python实现SMS-Activate接口调用,获取手机号和验证码》中,有详细介绍基于SMS-Activate平台,通过python来实现自动获取目标国家的手机号以及对应的手机号验证码。 而…...

网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施

网络安全 | 安全信息与事件管理&#xff08;SIEM&#xff09;系统的选型与实施 一、前言二、SIEM 系统的功能概述2.1 数据收集与整合2.2 实时监控与威胁检测2.3 事件响应与自动化2.4 合规性管理 三、SIEM 系统选型的关键因素3.1 功能需求评估3.2 可扩展性与性能3.3 易用性与可维…...

解决DeepSeek服务器繁忙问题

目录 解决DeepSeek服务器繁忙问题 一、用户端即时优化方案 二、高级技术方案 三、替代方案与平替工具&#xff08;最推荐简单好用&#xff09; 四、系统层建议与官方动态 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理与工具选择 二、…...

node.js+兰空图床实现随机图

之前博客一直用的公共的随机图API&#xff0c;虽然图片的质量都挺不错的&#xff0c;但是稳定性都比较一般&#xff0c;遂打算使用之前部署的兰空图床&#xff0c;自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作&#xff0c;有兴趣的话可…...

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f; 文章目录 DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f;一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT&#xff1a;谁更胜一筹&#xff1f;2.1 语言生成能力评测对比场景…...

mac搭建环境

从0-1搭建mac环境 先查看自己的芯片信息 bash uname -mbash-3.2$ uname -m arm64这里是自己的型号安装brew xcode-select --install xcode-select -p /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” source /Users/lanren/.…...

【R语言】t检验

一、基本介绍 t检验&#xff08;t-test&#xff09;是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式&#xff1a; t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…...

尚硅谷爬虫note005

一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...

词袋模型和词嵌入模型区别和关联分析(词袋模型是否属于词嵌入模型)

词袋模型&#xff08;Bag of Words, BoW&#xff09;不属于词嵌入模型&#xff0c;它们是两种完全不同的文本表示方法。以下从多个维度对比二者的核心区别 1. 本质区别 特性词袋模型 (BoW)词嵌入模型 (Word Embedding)表示形式离散的稀疏向量&#xff08;高维&#xff0c;维度…...

借用python 学习 VM的 FTP(VisionMaster4.3)

无懒不python:看官方V社区有介绍: 需要安装 Quick Easy FTP Server V4.0.0.exe 为了表示敬意再次放出链接: V社区-机器智能技术交流-VM关于FTP存图的一点分享 好了VM先放一边 先用python自收 自发: 毕竟这个免费 FTP服务端: 0.ftpserver.py 需要安装的库 和 注意事项已经在…...

BDD风格测试

BDD风格测试&#xff08;Behavior-Driven Development&#xff09; BDD&#xff08;行为驱动开发&#xff09;是一种以自然语言描述系统行为的测试方法论&#xff0c;强调团队协作与业务价值验证。结合Mockito的BDD风格API&#xff0c;可以编写更符合业务场景描述、更易读的测…...

[免费]Springboot+Vue医疗(医院)挂号管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue医疗(医院)挂号管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue医疗(医院)挂号管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 在如今社会上&#xff0c;关于信息上…...

Linux 查看磁盘中的大文件

在 Linux 系统中&#xff0c;你可以使用以下方法来查看磁盘中的大文件信息&#xff1a; 1. 使用 find 命令 find 命令可以递归查找指定目录下的大文件。 find /path/to/directory -type f -size 100M -exec ls -lh {} \;/path/to/directory&#xff1a;要查找的目录路径&…...

浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别

DeepSeek回复&#xff1a; 以下是主流消息队列&#xff08;MQ&#xff09;的对比分析&#xff0c;结合核心特性、适用场景和实际案例说明&#xff1a; 一、主流MQ对比分析 维度 Kafka RabbitMQ RocketMQ ActiveMQ所属公司Apache&#xff08;LinkedIn开源&#xff09;…...

君海游戏岗位,需要私我

游戏岗位内推啦&#xff0c;需要找我哈 共14个职位 广告投放主管 社会招聘全国 广告投放 社会招聘全国 设计主管 社会招聘全国 海外投放 社会招聘广东省广州市 海外运营 社会招聘广东省广州市 产品运营专员 社会招聘广东省广州市 平台运营 社会招聘广东…...

Vue2/Vue3分别如何使用Watch

在 Vue 2 和 Vue 3 中&#xff0c;watch 用于监听数据的变化并执行相应的逻辑。虽然两者的核心功能相同&#xff0c;但在语法和使用方式上有一些区别。以下是 Vue 2 和 Vue 3 中使用 watch 的详细说明&#xff1a; Vue 2 中的 watch 在 Vue 2 中&#xff0c;watch 是通过选项式…...

boss直聘登录 网易易盾 无感 滑块 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 实测网站是存在风控的比较…...

蓝桥杯 Java B 组之日期与时间计算(闰年、星期计算)

Day 5&#xff1a;日期与时间计算&#xff08;闰年、星期计算&#xff09; 在编程竞赛中&#xff0c;日期和时间计算是常见考点&#xff0c;涉及 闰年判断、星期计算、日期间隔计算 等问题。本日的学习目标&#xff1a; 判断闰年计算某个日期是星期几计算两个日期之间相差多少…...

51单片机之引脚图(详解)

8051单片机引脚分类与功能笔记 1. 电源引脚 VCC&#xff08;第40脚&#xff09;&#xff1a;接入5V电源&#xff0c;为单片机提供工作电压。GND&#xff08;第20脚&#xff09;&#xff1a;接地端&#xff0c;确保电路的电位参考点。 2.时钟引脚 XTAL1&#xff08;第19脚&a…...

掌控系统性能的利器:自动化系统性能监控工具

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

用大模型学大模型03-数学基础 概率论 随机变量 概率分布

deepseek.com:什么是概率&#xff0c;什么是随机变量&#xff1f;深度学习中常用概率的分布有哪些&#xff1f; 1. 什么是概率&#xff1f; 概率是描述事件发生的可能性的数值&#xff0c;范围在 0 到 1 之间&#xff1a; 0&#xff1a;事件不可能发生。1&#xff1a;事件必…...

ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件

FileStream 在向浏览器发送文件时节省了服务器内存和资源&#xff0c;但如果需要删除文件怎么办&#xff1f;本文介绍如何在发送文件后删除文件&#xff1b;用 C# 编写。 另请参阅&#xff1a;位图创建和下载 使用FileStream向浏览器发送数据效率更高&#xff0c;因为文件是从…...

如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件

DHTMLX Scheduler 是一个全面的调度解决方案&#xff0c;涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能&#xff0c;并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下&#xff0c;很可能可以使用自定义解决方案来实现此类功能。…...

UE_C++ —— Unreal Interfaces

目录 一&#xff0c;Declare an Interface in C 二&#xff0c;Interface Specifiers 三&#xff0c;Implement an Interface in C 四&#xff0c;Declare Interface Functions 五&#xff0c;C Only Interface Functions 六&#xff0c;Blueprint Callable Interface Fu…...

mapbox 从入门到精通 - 目录

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;总目录1.1 ☘️ mapbox基础1.2 ☘️…...

CentOS搭建PPPOE服务器

一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容&#xff1a; # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …...

在 CentOS 系统中配置交换空间(Swap)解决内存不足

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …...

pytorch训练五子棋ai

有3个文件 game.py 五子棋游戏 mod.py 神经网络模型 xl.py 训练的代码 aigame.py 玩家与对战的五子棋 game.py class Game:def __init__(self, h, w):# 行数self.h h# 列数self.w w# 棋盘self.L [[- for _ in range(w)] for _ in range(h)]# 当前玩家 - 表示空 X先…...

超越DeepSeek R1的Moe开源大模型 Qwen2.5-max 和 Qwen Chat Web UI 的发布,阿里搅动AI生态

敲黑板&#xff0c;说重点&#xff0c;最近阿里推出的 Qwen2.5-max 和 Qwen Chat Web UI&#xff0c;将对AI生态又一次冲击。 说冲击&#xff0c;因为 DeepSeek R1的热潮还未散退的情况下&#xff0c;由于服务器压力不能注册新的API&#xff0c;然后价格涨价&#xff0c;服务有…...

动态规划两个数组的dp问题系列一>两个字符串的最小ASCII 删除和

这里写目录标题 题目解析&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化&#xff1a;填表顺序&#xff1a;返回值&#xff1a;代码呈现&#xff1a; 题目解析&#xff1a; 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表顺序&#…...

【C语言】程序环境与预处理

目录 程序的翻译环境和执行环境 粗谈编译链接 翻译环境 编译的几个阶段及链接 运行环境 预处理详解 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## 带副作用的宏参数 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 …...

DeepSeek 背后的技术:GRPO,基于群组采样的高效大语言模型强化学习训练方法详解

强化学习&#xff08;Reinforcement Learning, RL&#xff09;已成为提升大型语言模型&#xff08;Large Language Models, LLMs&#xff09;推理能力的重要技术手段&#xff0c;特别是在需要复杂推理的任务中。DeepSeek 团队在 DeepSeek-Math [2] 和 DeepSeek-R1 [3] 模型中的…...

AnythingLLM打造私有知识库

一、 OllamaDeepSeek安装 https://blog.csdn.net/Stestack/article/details/145405151?spm1001.2014.3001.5502二、 nomic-embed-text nomic-embed-text主要用于文本嵌入和句子相似度任务&#xff0c;能够将这些任务应用于分类、聚类、检索等多种自然语言处理场景。该模型在…...

springboot多数据源事务管理

在Java应用中&#xff0c;使用多数据源时&#xff0c;事务管理是一个常见且复杂的问题。由于每个数据源都有自己的事务管理器&#xff0c;跨多个数据源的事务管理需要特别处理。以下是几种常见的解决方案&#xff1a; 1. JTA&#xff08;Java Transaction API&#xff09; JT…...

Lineageos 22.1 aosp15 定制学习专栏介绍

一.前言 学习了一段时间的rom开发&#xff0c;需求也大概做了一些&#xff0c;但是一直没有记录下来总结&#xff0c;这个专栏开始会基于如下平台开始尝试做一些常见模块的需求定制&#xff0c;记录学习&#xff0c;如果有错误欢迎指正&#xff0c;大家一起学习!至于pixel编译…...

win10中mstsc远程Centos-Stream 9图形化界面

文章目录 1 前置状态2 安装配置XRDP3 关闭SELinux3.1 查看selinux状态3.2 关闭selinux 4 启动XRDP5 Win10远程连接测试 1 前置状态 已安装CentOS9桌面版&#xff1b;Windows10。 2 安装配置XRDP sudo yum install epel-release sudo yum install xrdp sudo yum install tige…...

【Deepseek】解决Deepseek服务器繁忙的问题

随着Deepseek的爆火越来越多的人使用Deepseek,就导致很多情况下出现服务器繁忙的情况。本博客将讲述如何使用Deepseek不卡顿或者出现服务器繁忙的情况。 一.绕开官方服务器 现在无论是网页版还是app都是在访问【深度求索】的官方服务器&#xff0c;所以才会出现服务器繁忙的…...

【实战篇】室内设计师如何利用 DeepSeek 做设计:从灵感到落地的全方位指南

大家好!今天咱们来聊聊一个超级有趣的话题——室内设计师如何利用 DeepSeek 做设计。如果你是一名室内设计师,或者对室内设计感兴趣,那你一定知道,设计不仅仅是画画图、选选颜色那么简单。它涉及到灵感搜集、空间规划、材料选择、预算控制、客户沟通等一系列复杂的过程。而…...

从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地

导读&#xff1a;日志数据已成为企业洞察系统状态、监控网络安全及分析业务动态的宝贵资源。网易云音乐引入 Apache Doris 作为日志库新方案&#xff0c;替换了 ClickHouse。解决了 ClickHouse 运维复杂、不支持倒排索引的问题。目前已经稳定运行 3 个季度&#xff0c;规模达到…...

Linux执行一条命令并自动重试直到成功,自动化脚本

编辑filename.sh文件 sudo vim filename.shi 插入模式&#xff0c;编辑文件 # 定义函数来执行并重试每个命令 execute_with_retry() {local cmd"$1"while true; do# 执行命令&#xff0c;并将返回状态存储在STATUS变量中eval $cmdSTATUS$?# 检查命令是否成功&…...