Qt_显示类控件

server/2024/9/19 15:59:06/ 标签: qt, 开发语言, c++

目录

一、QLabel

1、QLabel属性介绍

2、textFormat文本格式

3、pixmap标签图片

3.1 resizeEvent 

4、QFrame边框

5、alignment文本对齐

6、wordWrap自动换行

7、indent设置缩进

8、margin设置边距 

9、buddy设置伙伴

二、QLCDNumber

1、QLCDNumber属性介绍

2、实现QLCDNumber倒计时功能

三、QProgressbar

1、QProgressbar属性介绍

2、实现自动增长的进度条

3、设置进度条的颜色 

四、QCalendarWidget

1、QCalendarWidget属性介绍 

2、代码测试

结语 


前言:

        在Qt中,显示类控件通常是给用户传递一些文本信息或图片信息,以达到和用户交互的目的。虽然显示类控件的作用看起来如此简单,但是其拥有各式各样的属性,并且细节很多,所以在进行设计显示类控件时需要特别注意。

一、QLabel

1、QLabel属性介绍

         QLabel是显示类控件中最为经典的控件,他表示标签的意思,一般情况下不可被鼠标或者键盘选中,单纯的向用户展示某些信息,属性介绍如下:

text

表示QLabel中的文本内容

textFormat

表示QLabel中的文本格式,有以下四种:

• Qt::PlainText 纯文本

• Qt::RichText 富文本(⽀持 html 标签)

• Qt::MarkdownText markdown 格式

• Qt::AutoText 根据文本内容自动决定文本格式

pixmap

表示QLabel中的图片内容

scaledContents

设置为true,会自动根据窗口比例拉伸QLabel的内容,设置为false则不会
alignment
设置⽔平和垂直方向的对齐
wordWrap
设置为true,则内部的⽂本会⾃动换行,设置为false则不会
indent
设置⽂本缩进,文本内容的开头和左边框的距离
margin
设置⽂本和边框之间的边距(包括上下左右四个边框)
openExternalLinks
是否允许打开⼀个外部的链接
buddy
给QLabel关联⼀个 "伙伴" ,触发QLabel时就能激活对应的伙伴

        也可以在ui文件中的右下角里的属性栏中看到QLabel的相关属性:

2、textFormat文本格式

         使用函数setTextFormat就可以对QLabel控件中的文本进行格式设置,设置完成后,该控件的文本就支持对应格式的插件,具体实现如下。

        ①选创建三个QLabel控件,然后对这三个控件赋予不同的textFormat,分别是PlainText 、RichText 、MarkdownTex,观察使用文本插件的效果:

        ②更改widget.cpp中的代码,观察运行结果:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setTextFormat(Qt::PlainText);ui->label->setText("<b> 这是纯文本 </b>");//纯文本不支持html的标签ui->label_2->setTextFormat(Qt::RichText);ui->label_2->setText("<b> 这是富文本 </b>");//<b>和</b>是富文本(即html的标签)ui->label_3->setTextFormat(Qt::MarkdownText);ui->label_3->setText("# 这是markdown文本");//#是MarkdownText独有的规则
}Widget::~Widget()
{delete ui;
}

         运行结果:

         从结果可以看到,不同的格式有着不同的规则,所打印出来的文本格式也就不一样,这就是textFormat的作用。

3、pixmap标签图片

         pixmap表示标签内的图片内容,可以通过setPixmap函数将图片设置到对应的标签里,所以得有一个图片资源,并且可以在代码中找到该图片资源的路径,通常会将该图片放到qrc文件下(qrc相关概念见QWidget属性介绍)。

        现在将该图片覆盖至整个窗口界面,首先先设置一个label作为载体,将label覆盖整个窗口界面,然后把图片覆盖整个label,以达到将图片覆盖整个窗口界面的效果。修改widget.cpp文件的代码如下:

#include "widget.h"
#include "ui_widget.h"#include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QRect windows = this->geometry();//拿到窗口的尺寸QLabel* ql = new QLabel(this);ql->setGeometry(windows);QPixmap p(":/shoe.png");ql->setPixmap(p);//将图片设置进label中//此时图片的大小是固定的,为了让图片填满整个label,要对图片进行拉伸ql->setScaledContents(true);
}Widget::~Widget()
{delete ui;
}

        运行结果:

3.1 resizeEvent 

        题外话:此时图片虽然覆盖了整个窗口界面,但是当我们放大或缩小这个窗口时,里面的图片并不会随着窗口的尺寸变动而调整。为了实现图片自动调整尺寸的功能,我们需要明白当窗口大小变化时,Qt会生成一个QresizeEvent的事件,进而自动调用resizeEvent虚函数,这里采取的多态的思想。因此我们只要重写resizeEvent函数,则每次放大或缩小窗口时都会调用我们重写后的实现。

        resizeEvent函数的介绍如下:

void resizeEvent(QResizeEvent *event);
//event包含了该事件生成时,当前窗口的尺寸

        在widget.h文件中重写resizeEvent虚函数(此时的代码逻辑较上述代码要变更一下,因为重写的resizeEvent函数里面要用到标签对象ql,所以要将ql放到一个全局可见的地方,方便让resizeEvent可以拿到他):

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QResizeEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void resizeEvent(QResizeEvent *event){ql->setGeometry(0,0,event->size().width(),event->size().height());}private:Ui::Widget *ui;QLabel* ql;
};
#endif // WIDGET_H

        运行结果:

4、QFrame边框

         QLabel继承自QFrame,而QFrame又继承QWidget。QFrame提供控件的边框样式,允许对QLabel的边框进行设置。可以在ui文件中右下角的属性栏看到QFrame,如下图:

        其中frameShape表示边框的样式,frameShadow表示边框阴影,lineWidth和midLineWidth表示边框宽度。其中frameShape用的是最多的,他可设置的样式如下:

QFrame::Box :矩形边框
QFrame::Panel :带有可点击区域的⾯板边框
QFrame::WinPanel :Windows⻛格的边框
QFrame::HLine :⽔平线边框
QFrame::VLine :垂直线边框
QFrame::StyledPanel :带有可点击区域的⾯板边框,但样式取决于窗⼝主题

5、alignment文本对齐

         通过调用函数setAlignment,来使控件内的文本进行对齐,具体的对齐方式有如下几种:

AlignHCenter:水平居中对齐

• AlignVCenter:垂直居中对齐

• AlignTop:和顶层边框对齐

• AlignLeft:和左边框对齐

• AlignRight:和右边框对齐

• AlignBottom:和底层边框对齐

        测试水平居中和垂直居中对齐的代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->label->setText("这是一个普通文本");
}Widget::~Widget()
{delete ui;
}

         运行结果:

6、wordWrap自动换行

        调用函数setWordWrap可以让QLabel控件里文本实现自动换行效果,代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//ui->label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->label->setWordWrap(true);ui->label->setText("这是一个普通文本这是一个普通文本这是一个""普通文本这是一个普通文本这是一个普通文本这是一个普通文本");
}Widget::~Widget()
{delete ui;
}

         运行结果:

7、indent设置缩进

         调用函数setIndent设置QLabel中文本的缩进,代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setIndent(20);ui->label->setText("这是一个普通文本这是一个普通文本这是一个""普通文本这是一个普通文本这是一个普通文本这是一个普通文本");
}Widget::~Widget()
{delete ui;
}

        运行结果:

8、margin设置边距 

        调用函数setMargin可以设置QLabel文本的四周边框的边距,由于QLabel控件默认是左边框对齐和垂直对齐的,不方便观察边距的效果,因此将QLabel控件定义成仅仅是左边框对齐,方便边距的效果。代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setAlignment(Qt::AlignLeft);ui->label->setMargin(30);ui->label->setText("这是一个普通文本这是一个普通文本这是一个""普通文本这是一个普通文本这是一个普通文本这是一个普通文本");
}Widget::~Widget()
{delete ui;
}

        运行结果:

9、buddy设置伙伴

        调用函数setBuddy来为QLabel设置一个伙伴,当触发QLabel时就能激活这个伙伴,他们类似于一种绑定关系,比如为QLabel设置一个按钮伙伴,当触发QLabel时这个按钮就会被选中。

        为了方便测试,可以在标签的文本中显示写出&a,作用是通过文本内容绑定alt+a快捷键,目的是通过alt+a的方式来触发QLabel,直接在ui文件中以拖拽控件的方式生成界面:

        分别给以上两个label控件设置两个对应的伙伴,代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setBuddy(ui->radioButton);ui->label_2->setBuddy(ui->radioButton_2);
}Widget::~Widget()
{delete ui;
}

         运行结果不方便用截图表现出来,具体的效果是当按下alt+a时,对应的按钮就会被选中。

二、QLCDNumber

1、QLCDNumber属性介绍

        QLCDNumber也是一个显示类控件,跟QLabel不同的是,QLCDNumber专门用于显示数字信息,和老式计算器的屏幕有些相似。

        QLCDNumber的属性如下:

value
可以通过设置他从而设置控件上显示的数字值,可以是小数也可以是整数,value会根据intValue的值变化而变化。
intValue
也可以通过设置他从而设置控件上显示的数字值,只能表示整数。当value是小数时,intValue也会自动根据value的值进行四舍五入取到整数。
digitCount
表示控件可以显示出几位数
mode
表示控件上数字的显示形式,比如:二进制、十进制....
segmentStyle
表示控件上数字的风格
smallDecimalPoint
设置控件上小数点的格式,比如字体间距和小数点的位置

2、实现QLCDNumber倒计时功能

        让QLCDNumber控件显示的数值自动减少,就如同一个倒计时,但是要实现这个功能,并不是依靠sleep函数,因为如果在widget构造函数中使用循环+sleep函数,则无法实现倒计时功能,因为界面的生成是在构造函数之后的,界面无法捕捉这个循环过程。并且Qt禁止用户创建线程对界面做修改,所以需要先创建一个定时器,这个定时器每过一段时间就会发出timeout信号,我们自定义一个槽函数然后连接这个信号,并且在槽函数中对QLCDNumber的数值进行减减操作。因此,整体的逻辑是依靠定时器发出的信号,从而间接的对QLCDNumber的数值进行减减

        widget.h代码如下:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void timeSlot();//QTimer的槽函数private:Ui::Widget *ui;QTimer* time;
};
#endif // WIDGET_H

        widget.cpp代码:

#include "widget.h"
#include "ui_widget.h"
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display(10);//设置计时器的数值为10//创建一个定时器time = new QTimer(this);time->start(1000);//每过一秒,该定时器发出一个信号connect(time,&QTimer::timeout,this,&Widget::timeSlot);
}Widget::~Widget()
{delete ui;
}void Widget::timeSlot()
{int num = ui->lcdNumber->value();if(num==0){time->stop();return;}num--;ui->lcdNumber->display(num);
}

        运行结果:

三、QProgressbar

1、QProgressbar属性介绍

         QProgressbar表示进度条,样式如下:

       属性介绍如下:

minimum
进度条最⼩值
maximum
进度条最大值
value
进度条当前值
alignment
数值在进度条中的对齐方式
textVisible
进度条数值是否可见
orientation
进度条的⽅向是⽔平还是垂直
invertAppearance
进度条是否是朝反⽅向增⻓进度
textDirection
⽂本的朝向
format
数值的格式

2、实现自动增长的进度条

         核心也是调用QTimer计时器来间接完成进度条的增长,实现逻辑和上述倒计时的例子是一样的,widget.h代码如下:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void progressbar();private:Ui::Widget *ui;QTimer* time;
};
#endif // WIDGET_H

        widget.cpp的代码如下:

#include "widget.h"
#include "ui_widget.h"
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);time = new QTimer(this);ui->progressBar->setValue(0);time->start(100);connect(time,&QTimer::timeout,this,&Widget::progressbar);
}Widget::~Widget()
{delete ui;
}void Widget::progressbar()
{int num = ui->progressBar->value();if(num==100){time->stop();return;}ui->progressBar->setValue(num+1);
}

        运行结果:

3、设置进度条的颜色 

        由于QProgressbar也是间接继承自QWidget,因此QWidget的属性styleSheer也是可以使用的,并且可以通过styleSheer更改进度条的颜色,代码如下:

#include "widget.h"
#include "ui_widget.h"
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);time = new QTimer(this);ui->progressBar->setValue(0);//设置进度条初始值//这里要加上QProgressBar::chunk,表示选中进度条的进度块ui->progressBar->setStyleSheet("QProgressBar::chunk{background-color:red;}");ui->progressBar->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//设置数值的对齐方式time->start(100);//一秒发出10个timeout信号connect(time,&QTimer::timeout,this,&Widget::progressbar);
}Widget::~Widget()
{delete ui;
}void Widget::progressbar()
{int num = ui->progressBar->value();if(num==100){time->stop();return;}ui->progressBar->setValue(num+1);
}

        运行结果:

        只不过这里有一个小bug,就是更改颜色后,数值会自动偏离,因此需要我们手动将数值的对齐方式再次进行设置。 

四、QCalendarWidget

1、QCalendarWidget属性介绍 

        QCalendarWidget表示日历,并且该控件只能用来表示日历,该控件样式如下:

        属性介绍:

selectDate
当前选中的⽇期
minimumDate
日历中的最小日期范围
maximumDate
日历中的最大日期范围
firstDayOfWeek
每周的第⼀天(也就是⽇历的第⼀列) 是周几
gridVisible
是否显示日历的边框
selectionMode
是否允许选择日期
navigationBarVisible
⽇历上⽅标题是否显示
horizontalHeaderFormat
日历第一行的表现格式
verticalHeaderFormat
日历第一列是否显示出来
dateEditEnabled
是否允许⽇期被编辑

        值得注意的是,该日历控件再选中其内容时,或者对日历进行操作时会发出相关信号,具体信号如下:

selectionChanged()
当选中的日期发⽣改变时发出
activated(const QDate&)
当双击⼀个有效的日期或者按下回⻋键时发出,并把该日期保存在QData中
currentPageChanged(int, int)
当年份⽉份改变时发出,形参表示改变后的新年份和⽉份

2、代码测试

        测试selectionChanged信号,即点击日历中的某一天后触发该信号,然后在自定义槽函数里打印当前选中的具体日期,并将该日期展示到界面上,ui文件中的界面设计如下:

        widget.cpp文件的代码如下:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_calendarWidget_selectionChanged()//selectionChanged信号的槽函数
{QDate date = ui->calendarWidget->selectedDate();qDebug()<<date;ui->label->setText("选中的日期:"+date.toString());
}

        运行结果:

结语 

        以上就是关于Qt中显示类控件的讲解,Qt中还有其他的显示类控件,但是基本大同小异,掌握好一些常用的控件,理解别的控件也就容易许多。每一种显示类控件都会有属于自己独特的属性,当然,也会有相似的属性,只不过属性的名称不一样。

        最后如果本文有遗漏或者有误的地方欢迎大家在评论区补充,谢谢大家!!    


http://www.ppmy.cn/server/117771.html

相关文章

【AI大模型】ChatGPT模型原理介绍(下)

目录 &#x1f354; GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 &#x1f354; ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…

上海亚商投顾:沪指探底回升 华为产业链午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日探底回升&#xff0c;深成指、创业板指盘中跌逾1%&#xff0c;午后集体拉升翻红。华为产业链午后走强…

朴朴超市 签到 任务脚本

脚本主要用于自动化处理朴朴超市APP的签到和组队任务。以下是对脚本中主要方法的作用解析: 初始化和登录 - __init__: - 初始化类对象,设置用户信息和请求头,尝试获取并设置随机位置。 - get_AccessToken: - 使用`refresh_token`刷新并获取`access_token`,用于后续的A…

安卓玩机工具-----ADB与 FASTBOOT模式 图形化 多功能玩机刷机工具

工具说明 这款工具是英文版。易于使用的工具提供了用于运行 ADB 和 Fastboot 命令的图形用户界面。ADB 功能包括旁加载、安装和卸载应用程序、测试设备以及重新启动到不同的模式。可以使用 fastboot 命令进行设备管理;其中包括检查 Antirollback 和 active slots 等变…

Nginx:高性能的Web服务器与反向代理

在当今的互联网世界中&#xff0c;Web服务器的选择对于网站的性能、稳定性和安全性至关重要。Nginx&#xff08;发音为“engine X”&#xff09;凭借其卓越的性能、丰富的功能集和灵活的配置选项&#xff0c;成为了众多网站和应用程序的首选Web服务器和反向代理。本文将深入探讨…

Canal+RabbitMQ数据同步环境配置

Canal 是阿里巴巴开发的开源工具&#xff0c;主要用于解析 MySQL 的 binlog 日志&#xff0c;从而实现数据同步。Canal 会模拟 MySQL 从库的协议&#xff0c;订阅主库的 binlog&#xff0c;从而获取数据库的变更信息。 将 Canal 解析到的 MySQL 数据库变更消息通过 RabbitMQ 分…

详细分析Uniapp中的轮播图基本知识(附Demo)

目录 前言1. 基本知识2. Demo2.1 基本2.2 自定义分页2.3 自定义动画 3. 扩展 前言 先看代码示例&#xff1a; 实现了一个带有分页指示器的轮播图组件 <template><view class"work-container"><!-- 轮播图 --><uni-swiper-dot class"uni…

flask框架

Flask 1 flask简介 我们之所以在浏览器中输入localhost:8080然后就可以把webapps下面的项目文件以浏览器的方式打开&#xff0c;功臣在与tomcat。python语言写的项目&#xff0c;转换为web&#xff0c;Flask框架 轻量级web应用框架。 环境准备&#xff1a; pip install fl…

SSHamble:一款针对SSH技术安全的研究与分析工具

关于SSHamble SSHamble是一款功能强大的SSH技术安全分析与研究工具&#xff0c;该工具基于Go语言开发&#xff0c;可以帮助广大研究人员更好地分析SSH相关的安全技术与缺陷问题。 功能介绍 SSHamble 是用于 SSH 实现的研究工具&#xff0c;其中包含下列功能&#xff1a; 1、针…

React源码学习(一):如何学习React源码

本系列源码学习&#xff0c;是基于 v16.13.1&#xff0c;v17.x与v16.x区别并不太大&#xff01; 一、如何正确的学习React源码&#xff1f; 找到Github&#xff0c;转到React仓库&#xff0c;fork / clone源码&#xff1a;React 查看Readme&#xff0c;在Documentation中有Cont…

Gateway学习笔记

目录 介绍&#xff1a; 核心概念 依赖 路由 断言 基本的断言工厂 自定义断言 过滤器 路由过滤器 过滤器工厂 自定义路由过滤器 全局过滤器 其他 过滤器执行顺序 前置后置&#xff08;&#xff1f;&#xff09; 跨域问题 yaml 解决 配置类解决 介绍&#x…

鸿蒙 ArkUI组件一

ArkUI组件 布局 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中&#xff0c;需要遵守以下流程保证整体的布局效果&#xff1a; 确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大…

适合博客的组件库

在选择适合博客的组件库时&#xff0c;需要考虑博客的主题、内容类型以及预期的用户体验。以下是一些推荐的组件库&#xff0c;它们各自具有独特的特点和优势&#xff0c;能够帮助你提升博客的视觉效果和用户体验&#xff1a; React Markdown&#xff1a;非常适合技术博客和教…

亚信软件测试实习面试记录

一、面试问题记录 1、首先是自我介绍&#xff0c;不用多说 2、技术问题 问得不深&#xff0c;简单来说几乎等于没问&#xff0c;只问了一句会不会***。 会Linux嘛&#xff08;应该可以自己回答的时候适当拓展的&#xff0c;但是我只老老实实说了会&#xff09;&#xff1b; 会…

个人电脑可以当服务器用吗?

服务器和普通电脑的主要区别体现在以下几个方面&#xff1a; 1.CPU处理性能 服务器的CPU配置通常是多核的&#xff0c;普通电脑的CPU往往只包含单个核心&#xff0c;因此在数据处理能力上远远不如服务器。 2.安全性能 服务器具备更高的可靠性、安全性、容错能力和安全保护能…

Sui与3DOS合作推动3D打印网络的去中心化

制造业创新者3DOS宣布将其庞大的3D打印网络与Sui集成。这一集成使用户、3D打印机和制造商能够连接到全球可访问的去中心化网络。 解锁去中心化3D打印的全部潜力依赖于精确的实时协调。Sui作为通用协调层&#xff0c;将用户、3D打印机和制造商同步到一个高效、统一的网络中。通…

jmeter

Jmeter快速入门 1.安装Jmeter Jmeter依赖于JDK&#xff0c;所以必须确保当前计算机上已经安装了JDK&#xff0c;并且配置了环境变量。 1.1.下载 可以Apache Jmeter官网下载&#xff0c;地址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 1.2.解压 因为下载的…

51单片机+proteus+(DS1302+DS18B20)

目录 1.温度传感器检测&#xff08;DS18B20&#xff09; 1.1基本概念 1.1.1 DS18B20的简介 1.1.2 DS18B20的框图 ​编辑 1.1.3 DS18B20的指令 1.1.4 总线时序协议 1.2代码 1.2.1DS18B20的初始化代码 1.2.2DS18B20的读代码 1.2.3DS18B20的写时序 ​编辑 1.2.4DS18B20…

在树莓派上构建和部署 Node.js 项目

探索在Raspberry Pi上构建和部署Node.js项目的最佳实践。通过我们的专业提示和技巧&#xff0c;克服常见挑战&#xff0c;使您的项目顺利运行。 去年圣诞节&#xff0c;我收到了一份极其令人着迷的礼物&#xff0c;它占据了我许多周末的时间&#xff0c;甚至让我夜不能寐。它就…

如何理解BCEWithLogitsLoss()

1.示例1 logit[0.5 -1.0 2.0] targets[1 0 1]# δsigmoid(x) pδ(logits)[δ(0.5) δ(-1.0) δ(2.0)][0.6225 0.2689 0.8808]loss1 -[1 log(0.6225) 0 log(1 - 0.6225)] ≈ 0.4744 loss2 -[0 log(0.2689) 1 log(1 - 0.2689)] ≈ 0.3133 loss3 -[1 log(0.8808) 0 …