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

初识——QT

QT安装方法

一、项目创建流程
  1. 创建项目

    • 入口:通过Qt Creator的欢迎页面或菜单栏(文件→新建项目)创建新项目。

    • 项目类型:选择「Qt Widgets Application」。

    • 路径要求:项目路径需为纯英文且不含特殊字符。

    • 构建系统:默认选择 CMake

    • 类配置:默认生成MainWindow类(包含UI文件)。

  2. 配置构建套件

    • 选择适用于当前平台的构建套件(如MinGW/MSVC)。

    • 若CMake配置失败,需检查CMake路径或更新组件。

  3. 运行项目

    • 点击「运行」按钮,生成默认窗口界面(含一个空Widget)。

二、工程文件解析
  1. CMakeLists.txt

    • 核心作用:定义项目构建规则、依赖关系及编译选项。

    • 关键配置

      cmake_minimum_required(VERSION 3.10)  # 指定CMake最低版本
      project(qt01 VERSION 0.1 LANGUAGES CXX)  # 设置项目名称及语言
      set(CMAKE_CXX_STANDARD 17)  # 指定C++标准为C++17
      find_package(Qt6 REQUIRED COMPONENTS Widgets)  # 引入Qt6 Widgets模块
      add_executable(qt01 main.cpp)  # 定义可执行文件
      target_link_libraries(qt01 PRIVATE Qt6::Widgets)  # 链接Qt库
    • 注意事项:需通过find_package引入所需Qt模块(如Widgets、Core等)。

  2. mainwindow.h

    • 功能:声明主窗口类,继承自QMainWindow

    • 关键代码

      #include <QMainWindow>
      namespace Ui { class MainWindow; }  // 前向声明UI类
      class MainWindow : public QMainWindow {Q_OBJECT  // 必须包含Q_OBJECT宏以支持信号与槽
      public:MainWindow(QWidget *parent = nullptr);~MainWindow();
      private:Ui::MainWindow *ui;  // UI对象指针
      };
  3. mainwindow.cpp

    • 功能:实现主窗口类的构造函数和析构函数。

    • 关键代码

      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);  // 初始化UI(自动生成)
      }
      MainWindow::~MainWindow() { delete ui; }  // 释放UI对象
  4. main.cpp

    • 功能:应用程序入口,创建主窗口并启动事件循环。

    • 关键代码

      #include "mainwindow.h"
      #include <QApplication>
      int main(int argc, char *argv[]) {QApplication a(argc, argv);  // 管理GUI程序生命周期MainWindow w;w.show();  // 显示窗口return a.exec();  // 进入事件循环
      }
    • 注意a.exec()是Qt事件循环的核心,负责处理用户输入和窗口事件。

  5. ui_mainwindow.h

    • 功能:由Qt Designer自动生成的UI布局代码,描述窗口中的控件及其属性。

三、Qt内存管理机制
  1. 父子对象关系

    • 规则:父对象销毁时自动删除所有子对象。

    • 示例

      QWidget *parent = new QWidget;
      QPushButton *button = new QPushButton(parent);  // button的父对象为parent
      delete parent;  // 自动删除button
  2. 智能指针

    • QScopedPointer:作用域内自动释放内存。

    • QSharedPointer:引用计数智能指针,共享所有权。

四、UI设计与信号槽
  1. 拖拽控件

    • 通过Qt Designer在.ui文件中拖拽控件(如按钮、标签)并设置属性(如文本、大小)。

    • 示例:设置按钮文本:

      ui->pushButton->setText("点我");
  2. 自动连接槽函数

    • 命名规则on_控件对象名_信号名()

    • 示例:按钮点击槽函数:

      void MainWindow::on_pushButton_clicked() {qDebug() << "按钮被点击";
      }
五、注意事项
  1. 路径规范:避免中文和特殊字符,防止构建失败。

  2. CMake配置:确保正确引入Qt模块(如Widgets、Core)。

  3. 内存管理:优先使用父子对象关系或智能指针,避免内存泄漏。

  4. UI更新:修改.ui文件后需重新构建以生成ui_*.h文件。

信号与槽机制

一、概述
  • 核心作用:Qt的信号与槽机制是用于对象间通信的松耦合方式,替代传统回调函数。当对象状态变化(事件)时发送信号,连接的槽函数自动响应。

  • 特点:支持多对多连接(一个信号可绑定多个槽,多个信号可绑定一个槽),支持跨线程通信,参数类型需兼容。 

二、信号与槽的定义
  1. 信号(Signal)

    • 声明方式:在类中使用 signals 关键字声明,无返回值(void),无需实现。

    • 示例: 

      class MyClass : public QObject {Q_OBJECT
      signals:void mySignal(int value); // 信号声明
      };
  2. 槽(Slot)

    • 声明方式:在类中使用 public/private/protected slots 声明,是普通成员函数,可带参数和返回值。

    • 示例:

      class MyClass : public QObject {Q_OBJECT
      public slots:void mySlot(int data); // 槽声明
      }; 
三、信号的发送与槽的调用
  • 信号发送:通过 emit 关键字触发信号。

    emit mySignal(100); // 发送信号
  • 槽调用规则

    • 槽函数按连接顺序依次执行。

    • 槽可以是私有函数,但通过信号连接仍可调用。 

四、信号与槽的连接方式
  1. 手动连接

    • 使用 QObject::connect 函数,语法:

      connect(sender, &SenderClass::signal, receiver, &ReceiverClass::slot);
    • 示例:

      connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::handleClick);
  2. 自动连接

    • 通过槽函数命名规则 on_对象名_信号名,需在 setupUi 中调用 QMetaObject::connectSlotsByName

    • 示例:

      void MainWindow::on_pushButton_clicked() { ... } // 自动连接 
五、连接类型与规则
  1. 连接类型Qt::ConnectionType

    类型描述
    AutoConnection默认,根据线程自动选择 Direct(同线程)或 Queued(跨线程)。
    DirectConnection立即执行,槽在发送者线程运行。
    QueuedConnection异步执行,槽在接收者线程事件循环中调用。
    BlockingQueuedConnection同步执行,发送者线程阻塞直到槽完成(需跨线程)。
    UniqueConnection避免重复连接,与上述类型按位或使用。
  2. 参数规则

    • 信号参数数量 ≥ 槽参数数量,且类型兼容。

    • 示例:

      // 合法:信号参数多于槽
      connect(obj1, &ClassA::signal(int, QString), obj2, &ClassB::slot(int));
      // 非法:槽参数多于信号
      connect(obj1, &ClassA::signal(int), obj2, &ClassB::slot(int, QString)); 
六、自定义信号与槽的条件
  1. 类必须直接或间接继承 QObject

  2. 类声明中需包含 Q_OBJECT 宏。

  3. 信号用 signals 声明,槽用 slots 声明。 

七、元对象编译器(moc)
  • 作用:处理 Qt 的扩展语法(如信号与槽),生成元对象代码(moc_*.cpp)。

  • 必要性:包含 Q_OBJECT 的类必须通过 moc 编译,否则信号与槽无法正常工作。 

八、关键示例
// 信号与槽定义
class Worker : public QObject {Q_OBJECT
signals:void progressUpdated(int percent);
public slots:void doWork() { // 工作逻辑emit progressUpdated(50); }
};// 连接
Worker worker;
QObject::connect(&worker, &Worker::progressUpdated, this, [](int percent) {qDebug() << "Progress:" << percent;
}); 

简单示例:

teacher.h:

// teacher.h
#include <QObject>
class Teacher : public QObject {Q_OBJECT
public:explicit Teacher(QObject *parent = nullptr) : QObject(parent) {}signals:void hungry();  // 正确信号声明
};

student.h:

// student.h
#include <QObject>
#include <QDebug>
class Student : public QObject {Q_OBJECT
public:explicit Student(QObject *parent = nullptr) : QObject(parent) {}public slots:void treat();   // 槽函数声明
};

student.cpp:

// student.cpp
#include "student.h"
void Student::treat() {qDebug() << "Student treats teacher";  // 修正输出内容
}

window.h:

// window.h
#include <QWidget>
#include "teacher.h"
#include "student.h"class Window : public QWidget {Q_OBJECT
public:explicit Window(QWidget *parent = nullptr);public slots:void xiake();  // 触发信号的方法private:Teacher *teacher;Student *student;
};

window.cpp: 

// window.cpp
#include "window.h"Window::Window(QWidget *parent) : QWidget(parent) {teacher = new Teacher(this);student = new Student(this);// 正确连接信号与槽(注意信号拼写)connect(teacher, &Teacher::hungry, student, &Student::treat);
}void Window::xiake() {emit teacher->hungry();  // 触发信号
}
九、注意事项
  1. 线程安全:跨线程通信优先使用 QueuedConnection

  2. 命名规范:自动连接槽需严格遵循 on_对象名_信号名 格式。

  3. 内存管理:避免循环引用,确保对象生命周期可控。

Qt事件处理总结与归纳

一、事件简介
  1. 概念

    • 事件是用户或系统产生的交互操作,通过事件循环处理,用于对象间信息交互。

    • Qt将系统消息转换为QEvent对象,所有QObject子类均可处理事件。

  2. 常见事件类型

    • 用户界面事件:鼠标事件(QMouseEvent)、键盘事件(QKeyEvent)、触摸事件(QTouchEvent)。

    • 系统事件:定时器事件(QTimerEvent)、窗口事件(QResizeEvent)、绘图事件(QPaintEvent)。

    • 自定义事件:继承QEvent实现,用于特定需求。

二、事件处理机制
  1. 事件分发流程

    • 事件队列:操作系统消息被转换为QEvent,由QCoreApplication::exec()驱动的主事件循环处理。

    • 事件传递

      1. 事件先传递到焦点控件。

      2. 若未被处理,逐级传递给父控件。

  2. 事件处理函数

    • 子类可重写event()函数或特定事件处理函数(如mousePressEvent())。

    • 示例:自定义按钮重写鼠标事件:

      // 继承QPushButton并重写mousePressEvent
      void CustomPushButton::mousePressEvent(QMouseEvent *e) {qDebug() << "Custom按钮被按下";QPushButton::mousePressEvent(e); // 调用父类实现,确保信号正常触发
      }
  3. 事件过滤器(Event Filter)

    • 作用:拦截目标对象的事件,在事件到达前处理。

    • 步骤

      1. 安装过滤器targetObj->installEventFilter(filterObj)

      2. 重写eventFilter():判断事件类型并处理,返回true拦截事件,false继续传递。

      bool MainWindow::eventFilter(QObject *obj, QEvent *event) {if (obj == ui->pushButton && event->type() == QEvent::MouseButtonPress) {qDebug() << "拦截按钮点击";return true; // 阻止事件传递}return QMainWindow::eventFilter(obj, event); // 默认处理
      }
三、事件与信号的区别
特性事件(QEvent)信号(Signal)
触发方式由系统或用户操作触发由对象主动发出(如按钮点击触发clicked
处理机制通过事件队列分发,可被过滤或拦截直接调用连接的槽函数
灵活性可自定义事件类型和分发逻辑信号与槽通过connect绑定,不可拦截
典型应用底层交互(如鼠标移动、键盘输入)逻辑响应(如按钮点击后的业务逻辑)
四、QEventLoop 的应用
  1. 作用

    • 在局部范围内启动事件循环,用于等待异步操作完成(如定时器、对话框关闭)。

  2. 使用场景

    • 等待定时器

      QEventLoop loop;
      QTimer::singleShot(3000, &loop, &QEventLoop::quit);
      loop.exec(); // 阻塞3秒后继续执行
    • 模态对话框

      QDialog dialog;
      QEventLoop loop;
      connect(&dialog, &QDialog::finished, &loop, &QEventLoop::quit);
      dialog.show();
      loop.exec(); // 等待对话框关闭
五、常见问题与解决
  1. 头文件缺失

    • 错误customepushbutton.h: No such file or directory

    • 解决:在CMake中添加包含目录:

      include_directories(${PROJECT_SOURCE_DIR})
  2. 类型转换错误

    • 错误invalid conversion from 'QWidget' to 'QPushButton'

    • 解决:确保自定义控件继承自正确的基类(如QPushButton)。

  3. 信号未触发

    • 原因:重写事件处理函数时未调用父类实现。

    • 解决:在自定义的mousePressEvent中调用QPushButton::mousePressEvent(e)

六、总结
  • 事件处理核心:理解事件分发流程、重写事件函数、使用过滤器拦截事件。

  • 事件与信号结合:事件处理底层交互,信号驱动业务逻辑,两者互补。

  • 开发注意事项

    • 继承控件时确保调用父类事件函数以维持原有逻辑。

    • 使用QEventLoop避免主线程阻塞,保持界面流畅。

    • 合理使用事件过滤器实现复杂交互逻辑。

 

  • 这是本人的学习笔记不是获利的工具,小作者会一直写下去,希望大家能多多监督我
  • 文章会每攒够两篇进行更新发布(受平台原因,也是希望能让更多的人看见)
  • 感谢各位的阅读希望我的文章会对诸君有所帮助

相关文章:

初识——QT

QT安装方法 一、项目创建流程 创建项目 入口&#xff1a;通过Qt Creator的欢迎页面或菜单栏&#xff08;文件→新建项目&#xff09;创建新项目。 项目类型&#xff1a;选择「Qt Widgets Application」。 路径要求&#xff1a;项目路径需为纯英文且不含特殊字符。 构建系统…...

力扣-78.子集

给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 class Solution {List<List<Integer>> res new ArrayList<>();List<I…...

python中字符串的操作

‌1. 字符串创建‌ 使用单引号、双引号或三引号创建字符串三引号适用于多行字符串&#xff0c;且可以自由包含单双引号原始字符串使用r前缀&#xff0c;如r’Hello\nWorld’会原样输出\n ‌2. 基本操作‌ 拼接&#xff1a;使用运算符或join()方法复制&#xff1a;使用*运算符…...

《Elasticsearch 源码解析与优化实战》笔记

术语 思维导图 基础和环境 1-2 主要流程 3-10 内部模块 11-17 优化和诊断 18-22 资料 https://elasticsearchbook.com/...

华为网路设备学习-22(路由器OSPF-LSA及特殊详解)

一、基本概念 OSPF协议的基本概念 OSPF是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;主要用于在自治系统&#xff08;AS&#xff09;内部使路由器获得远端网络的路由信息。OSPF是一种链路状态路由协议&#xff0c;不直接传递路由表&#xff0c;而是通过交换链路…...

多线程(四)

目录 一 . 单例模式 &#xff08;1&#xff09;什么是设计模式&#xff1f; &#xff08;2&#xff09;饿汉模式 &#xff08;3&#xff09;懒汉模式 二 . 指令重排序 今天咱们继续讲解多线程的相关内容 一 . 单例模式 &#xff08;1&#xff09;什么是设计模式&am…...

【设计模式】- 结构型模式

代理模式 给目标对象提供一个代理以控制对该对象的访问。外界如果需要访问目标对象&#xff0c;需要去访问代理对象。 分类&#xff1a; 静态代理&#xff1a;代理类在编译时期生成动态代理&#xff1a;代理类在java运行时生成 JDK代理CGLib代理 【主要角色】&#xff1a; 抽…...

python报错:使用json.dumps()时,报错type xxx is not json serializable错误原因及解决方案

文章目录 一、错误原因分析二、解决方案1. **自定义对象序列化方法一&#xff1a;使用default参数定义转换逻辑方法二&#xff1a;继承JSONEncoder类统一处理 2. **处理特殊数据类型场景一&#xff1a;datetime或numpy类型场景二&#xff1a;bytes类型 3. **处理复杂数据结构 三…...

Vue3中实现轮播图

目录 1. 轮播图介绍 2. 实现轮播图 2.1 准备工作 1、准备至少三张图片&#xff0c;并将图片文件名改为数字123 2、搭好HTML的标签 3、写好按钮和图片标签 ​编辑 2.2 单向绑定图片 2.3 在按钮里使用方法 2.4 运行代码 3. 完整代码 1. 轮播图介绍 首先&#xff0c;什么是…...

flutter缓存网络视频到本地,可离线观看

记录一下解决问题的过程&#xff0c;希望自己以后可以参考看看&#xff0c;解决更多的问题。 需求&#xff1a;flutter 缓存网络视频文件&#xff0c;可离线观看。 解决&#xff1a; 1&#xff0c;flutter APP视频播放组件调整&#xff1b; 2&#xff0c;找到视频播放组件&a…...

2025年Ai写PPT工具推荐,这5款Ai工具可以一键生成专业PPT

上个月给客户做产品宣讲时&#xff0c;我对着空白 PPT 页面熬到凌晨一点&#xff0c;光是调整文字排版就改了十几版&#xff0c;最后还是被吐槽 "内容零散没重点"。后来同事分享了几款 ai 写 PPT 工具&#xff0c;试完发现简直打开了新世界的大门 —— 不用手动写大纲…...

【深度学习】#11 优化算法

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 目录 深度学习中的优化挑战局部极小值鞍点梯度消失 凸性凸集凸函数 梯度下降一维梯度下降学习率局部极小值 多元梯度下降 随机梯度下降随机梯度更新动态学习率…...

数学复习笔记 13

前言 继续做线性相关的练习题&#xff0c;然后做矩阵的例题&#xff0c;还有矩阵的练习题。 646 A 明显是错的。因为假设系数全部是零&#xff0c;就不是线性相关了。要限制系数不全是零&#xff0c;才可以是线性相关。 B 这个说法好像没啥问题。系数全为零肯定线性组合的结…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月16日第79弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀6-8个和值&#xff0c;可以做到100-300注左右。 (1)定…...

阳台光伏+储能:安科瑞智能计量仪表来助力

随着可再生能源的普及和家庭储能需求的增长&#xff0c;阳台光伏储能系统逐渐成为家庭能源管理的新趋势。如何精准计量储能系统的发电量、用电量及电网交互数据&#xff0c;成为优化能源利用效率的关键。安科瑞计量仪表凭借高精度、多功能及智能化特性&#xff0c;为家庭阳台储…...

Unable to determine the device handle for GPU 0000:1A:00.0: Unknown Error

Unable to determine the device handle for GPU 0000:1A:00.0: Unknown Error 省流&#xff1a;我遇到这个问题重置bios设置就好了 这个错误信息表明系统无法识别或访问GPU&#xff08;0000:1A:00.0&#xff09;&#xff0c;通常与CUDA、驱动程序或硬件相关。以下是可能的原…...

多态性标记设计

1.确定区间 2.获取该区间内的序列&#xff0c;如果只有一个位置&#xff0c;可以前后扩100bp 使用ncbi primer blast进行引物设计&#xff08;https://blast.ncbi.nlm.nih.gov/Blast.cgi&#xff09;...

Jenkins 最佳实践

1. 在Jenkins中避免调度过载 过载Jenkins以同时运行多个作业可能导致资源竞争、构建速度变慢和系统性能问题。分配作业启动时间可以防止瓶颈&#xff0c;并确保更顺畅的执行。如何实现&#xff1f; 在Cron表达式中使用H&#xff1a;引入抖动&#xff08;jitter&#xff09;&a…...

如何查询Ubuntu系统中最大的几个目录以G单位显示大小,从大到小排列?

环境&#xff1a; Ubuntu 20,04 问题描述&#xff1a; 如何查询系统中最大的几个目录以G单位显示大小&#xff0c;从大到小排列&#xff1f; 解决方案&#xff1a; 想查看整个系统&#xff08;单一文件系统内&#xff09;最大的20个目录&#xff0c;结果按大小从大到小排序…...

深入浅出拆分学习,图神经网络拆分学习,混合联邦学习

深入浅出解析拆分学习&#xff08;Split Learning&#xff09;、图神经网络拆分学习&#xff08;Split Learning for Graph Neural Networks&#xff09;以及混合联邦学习&#xff08;Hybrid Federated Learning&#xff09;&#xff0c;这三者都体现了在分布式数据环境下进行机…...

DDD领域驱动介绍

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...

ubuntu22鼠键失灵恢复记录笔记chatgpt解决

ChatGPT 说&#xff1a; 你提到“Ubuntu 22 鼠键失灵”&#xff0c;这个问题可能涉及以下几方面&#xff1a; &#x1f9ed; 先确认问题 是鼠标问题还是键盘问题&#xff0c;还是触控板&#xff1f; “鼠键”一般理解为“鼠标键”&#xff0c;请确认你是指鼠标左键/右键失灵&a…...

在服务器上安装AlphaFold2遇到的问题(1)

犯了错误&#xff0c;轻信deepseek&#xff0c;误将cuDNN8.9.7删掉 [rootlocalhost ~]# cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 #define CUDNN_MAJOR 8 #define CUDNN_MINOR 9 #define CUDNN_PATCHLEVEL 7 -- #define CUDNN_VERSION (CUDNN_MA…...

ch10 题目参考思路

ch10 - 最小生成树 有线通讯网 知识点&#xff1a;Prim 算法思路&#xff1a; 该题要求对 n 座城市铺设 n - 1 条光缆&#xff0c;并要求所有城市连通&#xff0c;那本质上是一棵树&#xff0c;又要求铺设光缆的费用最低&#xff0c;即要求选取的 n - 1 条光缆的长度最小&…...

Hudi、Iceberg 、 Paimon 数据湖选型对比

Hudi、Iceberg 和 Paimon 是当前数据湖领域的三大主流开源框架,均致力于解决数据湖场景下的增量更新、事务支持、元数据管理、流批统一等核心问题,但设计理念和适用场景存在差异。以下从技术特性、适用场景和选型建议三方面对比分析: 一、核心技术特性对比 维度HudiIceberg…...

2025认证杯数学建模第二阶段A题完整论文(代码齐全):小行星轨迹预测思路

2025认证杯数学建模第二阶段A题完整论文&#xff08;代码齐全&#xff09;:小行星轨迹预测思路,详细内容见文末名片 第二阶段问题 1 分析 问题起源与相关性&#xff1a;为了更全面地评估近地小行星对地球的潜在威胁&#xff0c;需要对其轨道进行长期预测。三个月内的观测数据为…...

信息安全基础知识

信息系统 信息系统能进行&#xff08;数据&#xff09;的采集、传输、存储、加工&#xff0c;使用和维护的计算机应用系统 例如&#xff1a;办公自动化、CRM/ERP、HRM、12306火车订票系统等。 信息安全 信息安全是指保护信息系统中的计算机硬件、软件、数据不因偶然或者恶意…...

UE RPG游戏开发练手 第二十六课 普通攻击1

UE RPG游戏开发练手 第二十六课 普通攻击1 1.定义攻击的InputTag MyGameplayTags.h代码 RPGGAMETEST_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_LightAttack_Axe);MyGameplayTag.cpp代码 UE_DEFINE_GAMEPLAY_TAG(InputTag_LightAttack_Axe, "InputTag.LightAttack.Ax…...

SAP ABAP 程序中归档数据读取方式

上一篇文章记录了字段目录&#xff0c;归档信息结构&#xff0c;这篇文章记录如何通过字段目录&#xff0c;归档信息结构&#xff0c;归档对象读取归档数据。未归档数据是从数据库表直接抽取&#xff0c;本样例是通过归档读取方式复写sql。 发布时间&#xff1a;2025.05.16 示…...

每周资讯 | 腾讯Q1财报:国内游戏业务收入同比增长24%;Tripledot 8亿美元收购AppLovin游戏业务

内容速览&#xff1a; 广州“服务贸易和数字贸易22条”助推游戏产业发展Tripledot Studios 8亿美元收购AppLovin游戏业务苹果紧急申请暂停执行AppStore新规4月中国手游出海收入下载榜&#xff0c;点点互动《Kingshot》收入激增 腾讯Q1财报&#xff1a;国内游戏业务收入同比增长…...

iOS SwiftUI的具体运用实例(SwiftUI库的运用)

最近接触到一个 SwiftUI的第三方框架&#xff0c;它非常的好用。以下是 具体运用实例&#xff0c;结合其核心功能与开发场景&#xff0c;分多个维度进行详细解析&#xff1a; 一、基础 UI 组件开发 登录界面 SwiftUI 的 VStack、TextField 和 Button 可快速构建用户登录表单。例…...

杰理ac696配置sd卡随机播放

#define FCYCLE_LIST 0 // 列表循环&#xff08;按顺序播放文件列表&#xff09; #define FCYCLE_ALL 1 // 全部循环&#xff08;播放完所有文件后重新开始&#xff09; #define FCYCLE_ONE 2 // 单曲循环&#xff08;重复播放当前文件&#xff09; #define …...

MCP协议的核心机制和交互过程

MCP的核心是JSON-RPC 2.0 MCP使用了 JSON-RPC 2.0 作为client和server端的消息传输。JSON-RPC 2.0是一个用JSON编码的轻量级远程过程调用协议。它的优越性如下: 易读,易调试与编程语言无关,环境无关技术成熟,规范清晰且应用广泛JSON-NPC 2.0定义了request、response、noti…...

论信息系统项目的范围管理

论信息系统项目的范围管理 前言一、规划范围管理&#xff0c;收集需求二、定义范围三、创建工作分解结构四、确认范围五、控制范围 前言 为了应对烟草零售客户数量大幅度增长所带来的问题&#xff0c;切实履行控烟履约的相关要求&#xff0c;同时也为了响应国务院“放管服”政策…...

米勒电容补偿的理解

米勒电容补偿是使运放放大器稳定的重要手法&#xff0c;可以使两级运放的两个极点分离&#xff0c;从而可以得到更好的相位裕度。 Miller 电容补偿的本质是增加一条通路流电流&#xff0c;流电流才是miller效应的本质。给定一个相同的输入&#xff0c;Miller 电容吃掉的电流比…...

力扣654题:最大二叉树(递归)

小学生一枚&#xff0c;自学信奥中&#xff0c;没参加培训机构&#xff0c;所以命名不规范、代码不优美是在所难免的&#xff0c;欢迎指正。 标签&#xff1a; 二叉树、递归 语言&#xff1a; C 题目&#xff1a; 给定一个不重复的整数数组 nums 。最大二叉树可以用下面的算…...

Go语言实现生产者-消费者问题的多种方法

Go语言实现生产者-消费者问题的多种方法 生产者-消费者问题是并发编程中的经典问题&#xff0c;涉及多个生产者生成数据&#xff0c;多个消费者消费数据&#xff0c;二者通过缓冲区&#xff08;队列&#xff09;进行协调&#xff0c;保证数据的正确传递和同步。本文将从简单到…...

深度学习驱动下的目标检测技术:原理、算法与应用创新(二)

三、主流深度学习目标检测算法剖析 3.1 R - CNN 系列算法 3.1.1 R - CNN 算法详解 R - CNN&#xff08;Region - based Convolutional Neural Networks&#xff09;是将卷积神经网络&#xff08;CNN&#xff09;应用于目标检测领域的开创性算法&#xff0c;其在目标检测发展历…...

提权脚本Powerup命令备忘单

1. 获取与加载 从 GitHub 下载&#xff1a;(New-Object Net.WebClient).DownloadFile("https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1", "C:\Temp\PowerUp.ps1")本地加载&#xff1a;Import-Module .\Power…...

人工智能 (AI) 在无线接入网络 (RAN) 中的变革性作用

随着电信行业向更智能、更高效的系统迈进&#xff0c;将 AI 集成到 RAN 中已不再是可有可无&#xff0c;而是至关重要。 随着 6G 时代的到来&#xff0c;人工智能 (AI) 有望降低运营成本&#xff0c;并带来更大的盈利机会。AI-RAN 正处于这一变革的前沿&#xff0c;在 RAN 环境…...

从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区

目录 前言 一、从硬件角度理解"Linux下一切皆文件" 从理解硬件是种“文件”到其他系统资源的抽象 二、缓冲区 1.缓冲区介绍 2.缓冲区的刷新策略 3.用户级缓冲区 这个用户级缓冲区在哪呢&#xff1f; 解释关于fork再加重定向“>”后数据会打印两份的原因 4.内核缓冲…...

Python-感知机以及实现感知机

感知机定义 如果有一个算法&#xff0c;具有1个或者多个入参&#xff0c;但是返回值要么是0&#xff0c;要么是1&#xff0c;那么这个算法就叫做感知机&#xff0c;也就是说&#xff0c;感知机是个算法 感知机有什么用 感知机是用来表示可能性的大小的&#xff0c;我们可以认…...

根据台账批量制作个人表

1. 前期材料准备 1&#xff09;要有 人员总的信息台账 2&#xff09;要有 个人明白卡模板 2. 开始操作 1&#xff09;打开 人员总的信息台账&#xff0c;选择所需要的数据模块&#xff1b; 2&#xff09;点击插入&#xff0c;选择数据透视表&#xff0c;按流程操作&…...

ohttps开启群晖ssl证书自动更新

开启群晖ssl证书自动更新OHTTPS ohttps是一个免费自动签发ssl证书、管理、部署的项目。 https://ohttps.com 本文举例以ohttps项目自动部署、更新群晖的ssl证书。 部署 签发证书 打开ohttps-证书管理-创建证书-按你实际情况创建证书。创建部署节点 打开Ohttps-部署节点-添加…...

【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况

好的&#xff01;为了更清楚地说明flattened类型在查询嵌套数组时可能返回不准确结果的情况&#xff0c;我们可以通过一个具体的例子来展示。这个例子将展示如何在文档中没有完全匹配的嵌套对象时&#xff0c;flattened类型仍然可能返回该文档。 示例文档结构 假设你有以下文…...

【知识点】语义分割任务中有哪些损失函数?

在语义分割任务中,模型需要对图像中的每个像素进行分类。因此,损失函数的设计不仅要关注整体精度,还需要特别注意目标物体的边界区域。以下是一些常用的损失函数及其适用场景,包括数学公式、PyTorch 实现和是否适合处理边界问题。 📌 一、交叉熵损失 Cross-Entropy Loss …...

Node.js 同步加载问题详解:原理、危害与优化策略

文章目录 一、什么是同步加载&#xff1f;二、同步加载的危害场景三、检测同步加载问题四、解决方案与代码优化 一、什么是同步加载&#xff1f; 1.核心概念 在 Node.js 的 CommonJS 模块系统中&#xff0c;require() 是同步操作&#xff1a; // 模块加载会阻塞后续代码执行 …...

linux下tcp/ip网络通信笔记1,

本文章主要为博主在学习网络通信的笔记一个Udp_echo_server,和client的代码实现 1&#xff0c;网络发展&#xff0c;网络协议&#xff0c;意识到网络通信——不同主机的进程间通信&#xff0c; 2&#xff0c;学习如何在应用层调用系统提供的接口进行通信&#xff0c;echo_Udp…...

网络攻防模拟:城市安全 “数字预演”

在当今数字化快速发展的时代&#xff0c;网络安全和城市安全面临着前所未有的挑战。为有效应对这些挑战&#xff0c;利用先进的技术搭建模拟演练平台至关重要。图扑软件的 HT for Web 技术&#xff0c;为网络攻防模拟与城市安全演练提供了全面且高效的解决方案。 三维场景搭建&…...

在 Ubuntu 20.04 中使用 init.d 或者systemd实现开机自动执行脚本

Ubuntu 20 默认使用的是 systemd 系统管理器&#xff0c;但传统的 SysV Init&#xff08;/etc/init.d/&#xff09;脚本依然兼容并可用。本文将介绍如何通过 init.d 写脚本来在开机时自动设置某个 GPIO&#xff08;如 GPIO407&#xff09;为高电平&#xff0c;适用于嵌入式系统…...