Qt 窗⼝

news2024/11/19 21:15:33

Qt 窗⼝

  • 菜单栏
    • 创建菜单栏
    • 在菜单栏中添加菜单
    • 创建菜单项
    • 在菜单项之间添加分割线
    • 综合⽰例
  • ⼯具栏
    • 创建⼯具栏
    • 设置停靠位置
    • 设置浮动属性
    • 设置移动属性
    • 综合⽰例
    • 状态栏
    • 状态栏的创建
    • 在状态栏中显⽰实时消息
    • 在状态栏中显⽰永久消息
  • 浮动窗⼝
    • 浮动窗⼝的创建
    • 设置停靠的位置
  • 对话框
    • 对话框介绍
    • 对话框的分类
      • 模态对话框
      • ⾮模态对话框
    • Qt 内置对话框
      • 消息对话框 QMessageBox
      • 颜⾊对话框 QColorDialog
      • ⽂件对话框 QFileDialog
      • 字体对话框 QFontDialog
      • 输⼊对话框 QInputDialog

Qt 窗⼝ 是通过 QMainWindow类 来实现的。
QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃ QWidget类,并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆接部件(dockwidgets)、⼀个状态栏(status bar)和⼀个 中⼼部件(central widget),它是许多应⽤程序的基础,如⽂本编辑器,图⽚编辑器等。如下图为 QMainwindow 中 各组件所处的位置:

在这里插入图片描述

菜单栏

Qt 中的菜单栏是通过 QMenuBar这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶部、主窗⼝标题栏下⾯

菜单栏中包含菜单. 菜单中包含菜单项
在这里插入图片描述

创建菜单栏

⽅式⼀:菜单栏的创建可以借助于 QMainWindow类提供的 menuBar() 函数来实现。menubar()函数原型如下:

    //创建菜单栏
    QMenuBar *menubar=menuBar();
    //将菜单栏放入窗口中
    this->setMenuBar(menubar);

⽅式⼆:在堆上动态创建;

    //创建菜单栏
    QMenuBar *menubar=new QMenuBar(this);
    //将菜单栏放入窗口中
    this->setMenuBar(menubar);

在菜单栏中添加菜单

创建菜单,并通过 QMenu 提供的 addMenu() 函数 来添加菜单

    //创建菜单
    QMenu* menu1=new QMenu("文件");
    QMenu* menu2=new QMenu("编辑");
    QMenu* menu3=new QMenu("查看");
    //将菜单添加到菜单栏中
    menubar->addMenu(menu1);
    menubar->addMenu(menu2);
    menubar->addMenu(menu3);

创建菜单项

在 Qt 中,并没有专⻔的菜单项类,可以通过 QAction 类,抽象出公共的动作

    //创建菜单项
    QAction*action1=new QAction("open");
    QAction*action2=new QAction("close");
    QAction*action3=new QAction("create");
    //将菜单项添加到菜单上
    menu1->addAction(action1);
    menu1->addAction(action2);
    menu1->addAction(action3);

运行结果
在这里插入图片描述

在菜单项之间添加分割线

在菜单项之间可以添加分割线。添加分割线是通过 QMenu 类 提供的
addSeparator() 函数来实现
在这里插入图片描述

在这里插入图片描述

综合⽰例

在窗⼝上创建⼀个菜单栏,在菜单栏中添加⼀些菜单,在某⼀个菜单中添加⼀些菜单项。

  1. 新建 Qt 项⽬
    在这里插入图片描述

  2. 在 “mainwindow.cpp” ⽂件中创建菜单和中央控件
    创建⼀个菜单栏, ⼀个菜单.
    两个菜单项: 保存, 加载
    创建⼀个 QTextEdit 作为窗⼝的中央控件
    在这里插入图片描述

  3. 给 action 添加⼀些动作
    在这里插入图片描述
    实现这两个槽函数
    使⽤ QFileDialog 来实现选择⽂件的效果:getSaveFileName ⽤于保存⽂件的场景. 此时的对话框可以输⼊⽂件名;getOpenFileName ⽤于打开⽂件的场景. 此时的对话框可以获取到⿏标选择的⽂件名
    在这里插入图片描述
    在这里插入图片描述
    执⾏程序, 可以看到此时就可以通过程序来保存/加载⽂件了. 并且对⽂件进⾏编辑
    在这里插入图片描述

⼯具栏

⼯具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,它并不是应⽤程序中必须存在的组件。它是⼀个可移动的组件,它的元素可以是各种窗⼝组件,它的元素通常以图标按钮的⽅式存在。
在这里插入图片描述

创建⼯具栏

调⽤ QMainWindow类的 addToolBar() 函数来创建⼯具栏,每增加⼀个⼯具栏都需要调⽤⼀次该函数。
添加两个⼯具栏

    //创建工具栏
    QToolBar*toolbar1 = new QToolBar(this);
    QToolBar*toolbar2 = new QToolBar(this);
    //将工具栏添加到窗口中
    this->addToolBar(toolbar1);
    this->addToolBar(toolbar2);

在这里插入图片描述

设置停靠位置

⼯具栏停靠位置的设置有两种⽅式。⼀种是在创建⼯具栏的同时指定停靠的位置,另⼀种是通过QToolBar类 提供的 setAllowedAreas()函数来设置

⽅式⼀:创建⼯具栏的同时指定其停靠的位置
在创建⼯具栏的同时,也可以设置⼯具栏的位置,其默认位置是在窗⼝的最上⾯;如上述代码,默认在最上⾯显⽰。⼯具栏允许停靠的区域由 QToolBar类 提供的allowAreas()函数 决定,其中可以设置的位置包括:

  • Qt::LeftToolBarArea 停靠在左侧
  • Qt::RightToolBarArea 停靠在右侧
  • Qt::TopToolBarArea 停靠在顶部
  • Qt::BottomToolBarArea 停靠在底部
  • Qt::AllToolBarAreas 以上四个位置都可停靠

⽰例:

    //创建工具栏
    QToolBar*toolbar1 = new QToolBar(this);
    QToolBar*toolbar2 = new QToolBar(this);
    //指定工具栏在左边显示
    this->addToolBar(Qt::LeftToolBarArea,toolbar1);
    //指定工具栏在右边显示
    this->addToolBar(Qt::RightToolBarArea,toolbar2);

在这里插入图片描述

⽅式⼆:使⽤ QToolBar类 提供的 setAllowedAreas()函数 设置停靠位置。⽰例:

    //创建工具栏
    QToolBar*toolbar1 = new QToolBar(this);
    QToolBar*toolbar2 = new QToolBar(this);
    this->addToolBar(toolbar1);
    this->addToolBar(toolbar2);
    
    //只允许在左侧停靠
    toolbar1->setAllowedAreas(Qt::LeftToolBarArea);
    //只允许在右侧停靠
    toolbar1->setAllowedAreas(Qt::RightToolBarArea);

设置浮动属性

⼯具栏的浮动属性可以通过 QToolBar类提供的 setFloatable()函数来设置。

    //创建工具栏
    QToolBar*toolbar1 = new QToolBar(this);
    QToolBar*toolbar2 = new QToolBar(this);
    //指定工具栏在左边显示
    this->addToolBar(Qt::LeftToolBarArea,toolbar1);
    //指定工具栏在右边显示
    this->addToolBar(Qt::RightToolBarArea,toolbar2);
    
    toolbar1->setFloatable(true);//允许浮动
    toolbar2->setFloatable(false);//不允许浮动

在这里插入图片描述

设置移动属性

设置⼯具栏的移动属性可以通过 QToolBar类提供的 setMovable()函数来设置。

    //创建工具栏
    QToolBar*toolbar1 = new QToolBar(this);
    QToolBar*toolbar2 = new QToolBar(this);
    //指定工具栏在左边显示
    this->addToolBar(Qt::LeftToolBarArea,toolbar1);
    //指定工具栏在右边显示
    this->addToolBar(Qt::RightToolBarArea,toolbar2);

    toolbar1->setMovable(true);//允许移动
    toolbar2->setMovable(false);//不允许移动

综合⽰例

在这里插入图片描述
运行效果
在这里插入图片描述

状态栏

状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状态栏。在 Qt 中,状态栏是通过 QStatusBar类来实现的。

状态栏的创建

状态栏的创建是通过 QMainWindow类 提供的 statusBar() 函数来创建
实例:

    //创建状态栏
    QStatusBar* statusbar = statusBar();
    //添加状态栏到窗口中
    setStatusBar(statusbar);

运行效果:
在这里插入图片描述

在状态栏中显⽰实时消息

在状态栏中显⽰实时消息是通过 showMessage() 函数来实现
实例:

    //状态栏中显示信息2s
    statusbar->showMessage("hello world",2000);

运行效果:
在这里插入图片描述

在状态栏中显⽰永久消息

在状态栏中可以显⽰永久消息,此处的永久消息是通过 标签 来显⽰的
⽰例:

    //创建标签
    QLabel* label = new QLabel("hello qt",this);
    //添加标签至状态栏中
    statusbar->addWidget(label);

运行效果:
在这里插入图片描述

浮动窗⼝

在 Qt 中,浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗⼝⼀般是位于核⼼部件的周围,可以有多个

浮动窗⼝的创建

浮动窗⼝的创建是通过 QDockWidget类提供的构造⽅法 QDockWidget()函数动态创建的;
⽰例:

    //创建浮动窗口
    QDockWidget* dockwidget = new QDockWidget("浮动窗口",this);
    //添加浮动窗口至当前窗口中
    addDockWidget(Qt::BottomDockWidgetArea,dockwidget);

运行效果:
在这里插入图片描述

设置停靠的位置

浮动窗⼝是位于中⼼部件的周围。可以通过 QDockWidget类中提供 setAllowedAreas() 函数设置其允许停靠的位置。其中可以设置允许停靠的位置有:
• Qt::LeftDockWidgetArea 停靠在左侧
• Qt::RightDockWidgetArea 停靠在右侧
• Qt::TopDockWidgetArea 停靠在顶部
• Qt::BottomDockWidgetArea 停靠在底部
• Qt::AllDockWidgetAreas 以上四个位置都可停靠

对话框

对话框介绍

对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中。对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互。

对话框的分类

对话框分为 模态对话框⾮模态对话框

模态对话框

模态对话框指的是:显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框。使⽤ QDialog::exec() 函数 调⽤

模态对话框适⽤于必须依赖⽤⼾选择的场合,⽐如消息显⽰,⽂件选择,打印设置等。

⽰例:

  1. 新建 Qt 项⽬,在 ui ⽂件中的菜单栏中设置两个菜单:"⽂件"和 “编辑”,在 菜单 “⽂件” 下新建菜单项:“创建” 并将菜单项 “新建” 置于⼯具栏中 在这里插入图片描述

  2. 、在 mainwindow.cpp ⽂件中实现:当点击 “新建” 时,弹出⼀个模态对话框

    connect(newAction,&QAction::triggered,[=](){
        QDialog dialog(this);
        dialog.resize(200,200);
        dialog.exec();
    });

运行效果
在这里插入图片描述

⾮模态对话框

⾮模态对话框显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种⾮阻塞式对话框,使⽤QDialog::show()函数调⽤。
⽰例:

    connect(newAction,&QAction::triggered,[=](){
        //非模态对话框为了防止一闪而过,创建在堆区
        QDialog* dialog = new QDialog(this);
        dialog->resize(200,200);
        /*当dlg2无限创建时(即- -直不断的打开关闭窗口) ,
        设置下面这个属性就可以在关闭非模态对话框时释放这个对象*/
        dialog->setAttribute(Qt::WA_DeleteOnClose) ;
        dialog->show();
    });

运行效果:
在这里插入图片描述

Qt 内置对话框

Qt 提供了多种可复⽤的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog类。常⽤标准对话框如下:
在这里插入图片描述

消息对话框 QMessageBox

消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息,强制⽤⼾进⾏选择操作。

QMessageBox类 中定义了静态成员函数,可以直接调⽤创建不同⻛格的消息对话框,其中包括:
在这里插入图片描述

⽰例1:问题提⽰消息对话框
在这里插入图片描述
运行效果:
在这里插入图片描述

⽰例2:信息提⽰消息对话框
在这里插入图片描述
运行效果:
在这里插入图片描述
⽰例3:警告信息消息对话框
在这里插入图片描述
运行效果:
在这里插入图片描述

⽰例4:错误提⽰消息对话框
在这里插入图片描述
运行效果:
在这里插入图片描述

颜⾊对话框 QColorDialog

颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。颜⾊对话框如下图⽰:
在这里插入图片描述
常⽤⽅法介绍:

  1. QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置⽗对象
  2. QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor对象设置默认颜⾊和⽗对象
  3. void setCurrentColor(const QColor &color) //设置当前颜⾊对话框
  4. QColor currentColor() const //获取当前颜⾊对话框
  5. QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString&title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜⾊选择对话框,并返回⼀个QColor对象
    参数说明:
    initial:设置默认颜⾊
    parent:设置⽗对象
    title:设置对话框标题
    options:设置选项
  6. void open(QObject *receiver, const char *member) //打开颜⾊对话框

⽰例1:
在这里插入图片描述
效果如下:

在这里插入图片描述
在这里插入图片描述

⽰例2:
在这里插入图片描述
运行效果:
在这里插入图片描述

⽂件对话框 QFileDialog

⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。
常⽤⽅法介绍:

  1. 打开⽂件(⼀次只能打开⼀个⽂件)
    QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr,QFileDialog::Options options = Options())
  2. 打开多个⽂件(⼀次可以打开多个⽂件)
    QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(),const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr,QFileDialog::Options options = Options())
  3. 保存⽂件
    QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
    参数说明:
    参数1:parent ⽗亲
    参数2:caption 对话框标题
    参数3:dir 默认打开的路径
    参数4:filter ⽂件过滤器

⽰例1:打开⽂件
在这里插入图片描述
运行效果:
在这里插入图片描述
在这里插入图片描述

⽰例2:保存⽂件
在这里插入图片描述

字体对话框 QFontDialog

Qt 中提供了预定义的字体对话框类 QFontDialog,⽤于提供选择字体的对话框部件。

⽰例:
在这里插入图片描述
运行效果:
在这里插入图片描述
在这里插入图片描述

输⼊对话框 QInputDialog

Qt 中提供了预定义的输⼊对话框类:QInputDialog,⽤于进⾏临时数据输⼊的场合。
常⽤⽅法介绍:

  1. 双精度浮点型输⼊数据对话框
    double getDouble (QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok= nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

  2. 整型输⼊数据对话框
    int getInt (QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

  3. 选择条⽬型输⼊数据框
    QString getItem (QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr,Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints =Qt::ImhNone) ;
    参数说明:
    parent:⽗亲
    title:对话框标题
    label:对话框标签
    items:可供选择的条⽬

⽰例1:浮点型数据输⼊对话框
在这里插入图片描述
运行效果:
在这里插入图片描述
在这里插入图片描述

⽰例2:整型数据输⼊对话框
在这里插入图片描述
运行效果:
在这里插入图片描述
在这里插入图片描述

⽰例3:打开选择条⽬对话框
在这里插入图片描述
运行效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring声明式事务控制

文章目录 1.编程式事务控制相关对象(了解即可)1.1PlarformTransactionManager1.2 TransactionDefinition 2.基于XML的声明式事务控制2.1声明式事务控制的实现 3.基于注解的声明式事务控制 1.编程式事务控制相关对象(了解即可) 1.1PlarformTransactionManager PlatformTransac…

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧 NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL] NL2SQL基础系列(2):主流大模型…

LLM应用开发框架LangChain

1、LangChain简介 1.1、LangChain发展史 LangChain 的作者是 Harrison Chase,最初是于 2022 年 10 月开源的一个项目,在 GitHub 上获得大量关注之后迅速转变为一家初创公司。2017 年 Harrison Chase 还在哈佛上大学,如今已是硅谷的一家热门…

314_C++_QT表格的撤销、恢复,可对多行、多item进行撤销、恢复操作

行–删除后的,撤销、恢复图示: 原图示 删除后 撤销操作 恢复操作 item修改后的撤销、恢复 原item 撤销修改 恢复修改 代码: --</

vue快速入门(二十四)输入停顿再进行响应

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用侦听器监视数据变化情况使用clearTimeout与定时器实现停顿一段时间再操作内容 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"view…

Chatgpt掘金之旅—有爱AI商业实战篇|播客剧本写作|(十三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业播客剧本写作服务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。…

代码随想录算法训练营第三十九天|62.不同路径、63.不同路径II

代码随想录算法训练营第三十九天|62.不同路径、63.不同路径II 62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为…

nginx反向代理conf

打开nginx配置。 对登录功能测试完毕后&#xff0c;接下来&#xff0c;我们思考一个问题&#xff1a;前端发送的请求&#xff0c;是如何请求到后端服务的&#xff1f; 前端请求地址&#xff1a;http://localhost/api/employee/login 后端接口地址&#xff1a;http://localho…

[leetcode]maximum-width-of-binary-tree

. - 力扣&#xff08;LeetCode&#xff09; 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉…

使用python编写网页自动答题-仿真考试

自动化实践经验分享 监听数据包地址&#xff1a;通过监听数据包地址&#xff0c;可以获得实时的答案信息&#xff0c;确保答题的准确性和实效性。提取答案内容&#xff1a;使用正则表达式和json模块&#xff0c;可以快速提取和处理答案信息。答题操作&#xff1a;根据答案内容…

前端三剑客 —— JavaScript (第八节)

目录 内容回顾&#xff1a; 事件对象 事件对象 事件对象的方法和属性 案例-移动DIV 案例-图片轮换 Ajax 内容回顾&#xff1a; 事件对象 1.1 什么是事件驱动 1.2 事件绑定 事件源&#xff1a;发生事件的源对象 事件对象&#xff1a;它包含了事件所有的信息&#xff0c;它…

深拷贝总结

JSON.parse(JSON.stringify(obj)) 这行代码的运行过程&#xff0c;就是利用 JSON.stringify 将js对象序列化&#xff08;JSON字符串&#xff09;&#xff0c;再使用JSON.parse来反序列化&#xff08;还原&#xff09;js对象&#xff1b;序列化的作用是存储和传输。&#xff08…

JavaScript(六)-高级篇

文章目录 作用域局部作用域全局作用域作用域链JS垃圾回收机制闭包变量提升 函数进阶函数提升函数参数动态参数多余参数 箭头函数 解构赋值数组解构对象解构 遍历数组forEach方法&#xff08;重点&#xff09;构造函数深入对象创建对象的三种方式构造函数实例成员 & 静态成员…

软考系规第2章思维导图,软硬件网络和次新技术大杂烩

虽然目前系统规划与管理师的教程是否改版存在不确定性&#xff0c;但是不影响咱们先概要了解当前的教程&#xff0c;使用思维导图的方式粗读教程。 为了帮助你更好的学习系规教程&#xff0c;降低系规教程阅读门槛&#xff0c;指尖疯特发起了教程伴读活动&#xff0c;通过伴读脑…

国内开通gpt会员方法

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

全局代理导致JetBrains IDE CPU占用高,jdk.internal.net.http.common

GoLand版本&#xff1a;2022.3.4 解决办法&#xff1a; 使用SOCKS代理代替HTTP代理 禁用Space和Code With Me插件 禁用 TLS V1.3&#xff0c;参考&#xff1a;https://stackoverflow.com/questions/54485755/java-11-httpclient-leads-to-endless-ssl-loop 参考 https://…

卷积神经网络(LeNet5实现对Fashion_MNIST分类

参考6.6. 卷积神经网络&#xff08;LeNet&#xff09; — 动手学深度学习 2.0.0 documentation (d2l.ai) ps&#xff1a;在这里预备使用pythorch 1.对 LeNet 的初步认识 总的来看&#xff0c;LeNet主要分为两个部分&#xff1a; 卷积编码器&#xff1a;由两个卷积层组成; …

KL散度的非负性证明

KL散度主要是用于衡量两个分布之间的差异。KL散度的公式如下&#xff1a; 其中&#xff0c;p&#xff0c;q分别是两个分布&#xff0c;且有&#xff1a; 证明KL散度的非负性&#xff0c;即证明&#xff1a; 即证明&#xff1a; 即证明&#xff1a; 由吉布斯不等式可知&#…

Arrow, 一个六边形的 Python 时间库

文章目录 Arrow, 一个六边形的 Python 时间库第一部分&#xff1a;背景介绍第二部分&#xff1a;库是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第…

Banana Pi BPI-M7 RK3588开发板运行RKLLM软件堆AI大模型部署

关于Banana Pi BPI-M7 Banana Pi BPI-M7 采用Rockchip RK3588&#xff0c;板载8/16/32G RAM内存和 64/128G eMMC存储&#xff0c;支持无线wifi6和蓝牙5.2。2x2.5G网络端口&#xff0c;1个HDMIout标准 输出口&#xff0c;2x USB3.0&#xff0c;2xTYPE-C&#xff0c;2x MIPI CSI…