Qt开发 显示类控件

news2024/11/16 9:37:13

Label

QLabel 可以用来显示文本和图片

核心属性如下

属性说明
textQLabel 中的文本
textFormat文本的格式:
Qt::PlainText 纯文本
Qt::RichText 富文本(支持 html 标签)
Qt::MarkdownText markdown 格式
Qt::AutoText 根据文本内容自动决定文本格式.
pixmapQLabel 内部包含的图片
scaledContents设为 true 表示内容自动拉伸填充 QLabel
设为 false 则不会自动拉伸
alignment对齐方式.
可以设置水平和垂直方向如何对齐.
wordWrap设为 true 内部的文本会自动换行
设为 false 则内部文本不会自动换行
indent设置文本缩进. 水平和垂直方向都生效.
margin内部文本和边框之间的边距
不同于于 indent,但是是上下左右四个方向都同时有效
而 indent 最多只是两个方向有效(具体哪两个方向有效取决于 alignment
openExternalLinks是否允许打开一个外部的链接
(当 QLabel 文本内容包含 url 的时候涉及到)
buddy给 QLabel 关联一个“伙伴”,这样点击 QLabel 时就能激活对应的伙伴
例如伙伴如果是一个 QcheckBox,那么该 QCheckBox 就会被选中

代码示例:显示不同格式的文本

(1) 界面上创建三个 QLabel

尺寸放大一些。obiectName 分别为 label,label 2,label 3

在这里插入图片描述

(2) 修改 widget.cpp,设置三个 label 的属性

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	ui->label->setTextFormat(Qt::PlainText);
	ui->label->setText("这是⼀段纯⽂本");
	ui->label_2->setTextFormat(Qt::RichText);
	ui->label_2->setText("<b> 这是⼀段富⽂本 </b>");
	ui->label_3->setTextFormat(Qt::MarkdownText);
	ui->label_3->setText("## 这是⼀段 markdown ⽂本");
}

(3) 运行程序,观察效果

在这里插入图片描述

代码示例:显示图片

虽然 QPushButton 也可以通过设置图标的方式设置图片,但是并非是一个好的选择。更多的时候还是希望通过 QLabel 来作为一个更单纯的显示图片的方式。

(1) 在界面上创建一个 QLabel,objectNamelabel

在这里插入图片描述

(2) 创建 resource.qrc 文件,并把图片导入到 qrc中

在这里插入图片描述

(3) 修改 widget.cpp,给 QLabel 设置图片

// 设置 label ⼤⼩和窗⼝⼀样⼤
ui->label->setGeometry(0, 0, 800, 600);
QPixmap pixmap(":/huaji.png");
ui->label->setPixmap(pixmap);

执行程序,观察效果

在这里插入图片描述

这个图片本身的尺寸是 480 * 480, 并没有把 QLabel 填充满.

(4) 修改代码,设置 scaledContents 属性

// 设置内容伸缩
ui->label->setScaledContents(true);

再次运行,观察效果,可以看到图片已经被拉伸,可以把窗口填满了

在这里插入图片描述

(5) 此时如果拖动窗口大小可以看到图片并不会随着窗口大小的改变而同步变化.

在这里插入图片描述

为了解决这个问题,可以在 Widget 中重写 resizeEvent 函数

// 重写 widget的resizeEvent函数. 这个函数会在窗⼝⼤⼩发⽣改变时被⾃动调⽤.
void Widget::resizeEvent(QResizeEvent *event) {
	// 可以直接通过 this->width() 和 this->height() 设置 label 新的尺⼨, 也可以通过 event 参数拿到新的尺⼨.
	// ui->label->setGeometry(0, 0, this->width(), this->height());
	ui->label->setGeometry(0, 0, event->size().width(), event->size().height());

	qDebug() << event->size();
}

执行程序,此时改变窗口大小,图片也会随之变化.

在这里插入图片描述

于此同时,在控制台里也能够看到尺寸变化的过程

在这里插入图片描述

此处的 resizeEvent 函数我们没有手动调用,但是能在窗口大小变化时被自动调用。

这个过程就是依赖 C++ 中的多态来实现的。Qt 框架内部管理着 QWidget 对象表示咱们的窗口。在窗口大小发生改变时,Qt 就会自动调用 resizeEvent 函数。

但是由于实际上这个表示窗口的并非是 QWidget,而是 QWidget 的子类。也就是咱们自己写的 Widget。此时虽然是通过父类调用函数,但是实际上执行的是子类的函数(也就是我们重写后的 resizeEvent ).

此处属于是多态机制的一种经典用法,通过上述过程,就可以把自定义的代码,插入到框架内部执行。相当于“注册回调函数”;

代码示例:文本对齐,自动换行,缩进,边距

(1) 创建四个 label,objectName 分别是 label 到 label_4

并且在 QFrame 中设置 frameShape 为 Box (设置边框之后看起来会更清晰一些)

在这里插入图片描述

在这里插入图片描述

QFrameQLabel 的父类。其中 frameshape 属性用来设置边框性质

  • OFrame::Box:矩形边框
  • QFrame::Panel:带有可点击区域的面板边框
  • QFrame::WinPanel :Windows风格的边框
  • QFrame::HLine:水平线边框
  • QFrame::VLine:垂直线边框
  • OFrame::StyledPanel :带有可点击区域的面板边框,但样式取决于窗口主题

(2) 编写 widget.cpp, 给这四个 label 设置属性.

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	// 设置⽂字居中对⻬
	ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
	ui->label->setText("垂直⽔平居中的⽂本");
	// 设置⾃动换⾏
	ui->label_2->setAlignment(Qt::AlignTop | Qt::AlignLeft);
	ui->label_2->setWordWrap(true);
	ui->label_2->setText("这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本");
	// 设置⾸⾏缩进
	ui->label_3->setAlignment(Qt::AlignTop | Qt::AlignLeft);
	ui->label_3->setIndent(20);
	ui->label_3->setText("这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本");
	// 设置边距
	ui->label_4->setAlignment(Qt::AlignTop | Qt::AlignLeft);
	ui->label_4->setMargin(20);
	ui->label_4->setText("这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本");
}

在这里插入图片描述

代码示例:设置伙伴

(1) 创建两个 label 和 两个 radioButton.

objectName 分别为 labellabel_2radioButtonradioButton_2

在这里插入图片描述

此处把 label 中的文本设置为“快捷键 &A”这样的形式

其中 & 后面跟着的字符,就是快捷键

可以通过 alt + A的方式来触发该快捷键

但是注意,这里的快捷键和 QPushButton 的不同,需要搭配 alt 和 单个字母的方式才能触发

(2) 编写 widget.cpp,设置 buddy 属性

当然这里也可以使用 Qt Designer 直接设置.

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	// 设置 label 的伙伴 widget
	ui->label->setBuddy(ui->radioButton);
	ui->label_2->setBuddy(ui->radioButton_2);
}

(3) 运行程序,可以看到,按下快捷键 alt +a 或者 alt + b 即可选中对应的选项

在这里插入图片描述

LCD Number

QLCDNumer 是一个专门用来显示数字的控件,类似于"老式计算器”的效果

核心属性

属性说明
intValueQLCDNumber 显示的数字值(int).
valueQLCDNumber显示的数字值(double)
和 intValue 是联动的
例如给 value 设为 1.5, intValue 的值就是 2.
另外, 设置 value 和 intValue 的方法名字为 display , 而不是 setValue 或者 setIntValue .
digitCount显示几位数字
mode数字显示形式.
QLCDNumber::Dec :十进制模式,显示常规的十进制数字
QLCDNumber::Hex:十六进制模式,以十六进制格式显示数字
QLCDNumber::Bin:二进制模式,以二进制格式显示数字
QLCDNumber::Pct:八进制模式,以八进制格式显示数字
只有十进制的时候才能显示小数点后的内容.
segmentStyle设置显示风格
QLCDNumber::Flat:平面的显示风格,数字呈现在一个平坦的表面上。
QLCDNumber::Outline: 轮廓显示风格,数字具有清晰的轮廓和阴影效果。
QLCDNumber::Filled:填充显示风格,数字被填充颜色并与背景区分。
smallDecimalPoint设置比较小的小数点.

代码示例:倒计时

(1) 在界面上创建一个 QLCDNumber,初始值设为 10。 objectNamelcdNumber

在这里插入图片描述

(2) 修改 widget.h 代码,创建一个 QTimer 成员,和一个 updateTime 函数

QTimer* timer;
void updateTime();

(3) 修改 widget.cpp,在构造函数中初始化 QTimer

QTimer 表示定时器通过 start 方法启动定时器之后,就会每隔一定周期,触发一次 QTimer::timeout 信号

使用 connectQTimer::timeout 信号和 Widget::updateTime 连接起来,意味着每次触发 QTimer::timeout 都会执行 Widget::updateTime

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	// 创建 QTimer 实例
	timer = new QTimer(this);
	// 连接信号槽. QTimer 会每隔⼀定的时间触发⼀个 timeout 信号. 现在把 timeout 信号和 updateTime 连接起来.
	// 此时意味着每次触发 timeout 信号都会伴随 updateTime 函数的执⾏.
	connect(timer, &QTimer::timeout, this, &Widget::updateTime);
	// 启动 QTimer, 并且规定每隔 1000ms 触发⼀次 timeout 信号.
	timer->start(1000);
}

(4) 修改 widget.cpp, 实现 updateTime

  • 通过 intValue 获取到 QLCDNumber 内部的数值.
  • 如果 value 的值归 0 了,就停止 QTimer。接下来 QTimer 也就不会触发 timeout 信号了
void Widget::updateTime() {
	qDebug() << "updateTime";
	int value = ui->lcdNumber->intValue();
	if (value <= 0) {
	// 如果时间到, 停⽌定时器.
	timer->stop();
	return;
	}
	ui->lcdNumber->display(value - 1);
}

(5) 执行程序,可以看到每隔一秒钟,显示的数字就减少 1.

在这里插入图片描述

针对上述代码,存在两个问题

(1) 上述代码如果直接在 Widget 构造函数中,通过一个循环 + sleep 的方式是否可以呢?

代码形如

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	int value = ui->lcdNumber->intValue();
	while (true) {
		std::this_thread::sleep_for(std::chrono::seconds(1));
		if (value <= 0) {
		break;
		}
	ui->lcdNumber->display(value - 1);
	}
}

显然,这个代码是不行的。循环会使 Widget 的构造函数无法执行完毕,此时界面是不能正确构造和显示

(2) 上述代码如果是在 Widget 构造函数中,另起一个线程,在新线程中完成循环 + sleep 是否可以呢?

代码形如

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	std::thread t([this]() {
		int value = this->ui->lcdNumber->intValue();
		while (true) {
			std::this_thread::sleep_for(std::chrono::seconds(1));
			if (value <= 0) {
			break;
			}
			this->ui->lcdNumber->display(value - 1);
		}
	});
}

这个代码同样是不行的。Qt 中规定,任何对于 GUI 上内容的操作,必须在主线程中完成。像 Widget 构造函数,以及 connect 连接的 slot 函数,都是在主线程中调用的。而我们自己创建的线程则不是。当我们自己的线程中尝试对界面元素进行修改时,Qt 程序往往会直接崩溃。

这样的约定主要是因为 GUI 中的状态往往是牵一发动全身的,修改一个地方,就需要同步的对其他内容进行调整。

比如调整了某个元素的尺寸,就可能影响到内部的文字位置,或者其他元素的位置。这里一连串的修改,都是需要按照一定的顺序来完成的。

由于多线程执行的顺序无法保障,因此 Qt 从根本上禁止了其他线程修改 GUI 状态避免后续的一系列问题。

ProgressBar

使用 QProgressBar 表示一个进度条

在这里插入图片描述

核心属性

属性说明
minimum进度条最小值
maximum进度条最大值
value进度条当前值
alignment文本在进度条中的对齐方式
Qt::AlignLeft:左对齐
Qt::AlignRight:右对齐
Qt::AlignCenter:居中对齐
Qt::AlignJustify:两端对齐
textVisible进度条的数字是否可见
orientation进度条的方向是水平还是垂直
invertApperance是否是朝反方向增长进度
textDirection文本的朝向
format展示的数字格式
%p:表示进度的百分比 (0-100)
%v:表示进度的数值 (0-100)
%m:表示剩余时间(以毫秒为单位)
%t:表示总时间(以毫秒为单位)

代码示例: 设置进度条按时间增长

(1) 在界面上创建进度条,objectNameprogressBar

在这里插入图片描述

其中最小值设为 0,最大值设为 100。当前值设为0

(2) 修改 widget.h, 创建 QTimer 和 updateProgressBar 函数

QTimer* timer;
void updateProgressBar ();

(3) 修改 widget.cpp, 初始化 QTimer

此处设置 100ms 触发一次 timeout 信号,也就是一秒钟触发 10次

Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
	ui->setupUi(this);
	timer = new QTimer(this);
	connect(timer, &QTimer::timeout, this, &Widget::updateProgressBar);
	timer->start(100);
}

(4) 修改 widget.cpp, 实现 updateProgressBar

void Widget::updateProgressBar() {
	int value = ui->progressBar->value();
	if (value >= 100) {
		timer->stop();
		return;
	}
	ui->progressBar->setValue(value + 1);
}

(5) 运行程序,可以看到进度条中的进度在快速增长

在这里插入图片描述

在实际开发中进度条的取值,往往是根据当前任务的实际进度来进行设置的。

比如需要读取一个很大的文件,就可以获取文件的总的大小,和当前读取完毕的大小,来设置进度条的比例。

由于上面我们介绍了 Qt 禁止在其他线程修改界面,因此进度条的更新往往也是需要搭配定时器来完成的。

通过定时器周期触发信号,主线程调用对应的 slot 函数,再在 slot 函数中对当前的任务进度进行计算,并更新进度条的界面效果。

代码示例:创建一个红色的进度条

不要忘了,QProgressBar 同样也是 QWidget 的子类,因此我们可以使用 styleSheet 通过样式来修改进度条的颜色。

(1) 在界面上创建一个进度条

在这里插入图片描述

(2) 在 Qt Designer 右侧的属性编辑器中,找到 QWidget 的 stylesheet 属性

编辑如下内容:

其中的 chunk 是选中进度条中的每个“块”,使用 QProgressBar::text 则可以选中文本

QProgressBar::chunk {background-color: #FF0000;}

同时把 QProcessBaralignment 属性设置为垂直水平居中

在这里插入图片描述

此处如果不设置 alignment,进度条中的数字会跑到左上角。这个怀疑是 Qt 本身的 bug,暂时只能先使用 alignment 来手动调整下。

(3) 执行程序,可以看到如下效果。我们就得到了一个红色的进度条

在这里插入图片描述

通过上述方式,也可以修改文字的颜色,字体大小等样式

Calendar Widget

QCalendarWidget 表示一个“日历",形如

在这里插入图片描述

核心属性

属性说明
selectDate当前选中的日期
minimumDate最小日期
maximumDate最大日期
firstDayOfWeek每周的第一天(也就是日历的第一列)是周几
gridVisible是否显示表格的边框
selectionMode是否允许选择日期
navigationBarVisibleri日历上方标题是否显示
horizontalHeaderFormat日历上方标题显示的日期格式
verticalHeaderFormat日历第一列显示的内容格式
dateEditEnabled是否允许日期被编辑

重要信号

信号说明
selectionChanged(const QDate&)当选中的日期发生改变时发出
activated(const QDate&)当双击一个有效的日期或者按下回车键时发出,形参是一个QDate类型,保存了选中的日期
currentPageChanged(int, int)当年份月份改变时发出,形参表示改变后的新年份和月份

代码示例:获取选中的日期

(1) 在界面上创建一个 QCalendarwidget 和一个label ,objectNamecalendarWidget ,label

在这里插入图片描述

(2) 给 QCalendarWidget 添加 slot 函数

void Widget::on_calendarWidget_selectionChanged()
{
	QDate date = ui->calendarWidget->selectedDate();
	qDebug() << date;
	ui->label->setText(date.toString());
}

(3) 执行程序,可以看到当选择不同的日期时,label 中的内容就会随之改变

在这里插入图片描述

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

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

相关文章

模拟器抓HTTP/S的包时如何绕过单向证书校验(XP框架)

模拟器抓HTTP/S的包时如何绕过单向证书校验&#xff08;XP框架&#xff09; 逍遥模拟器无法激活XP框架来绕过单向的证书校验&#xff0c;如下图&#xff1a; ​​ 解决办法&#xff1a; 安装JustMePlush.apk安装Just Trust Me.apk安装RE管理器.apk安装Xposedinstaller_逍遥64位…

FRM模型十三:互换定价(二)

定义一个互换&#xff0c;本金为1e7&#xff0c;7年后到期 固定端&#xff1a;利率2.5%,每年付息一次 浮动端&#xff1a;Libor6M,每半年付息一次 import QuantLib as ql from prettytable import PrettyTable# 定义全局时间&#xff1a;当前日期&#xff0c;下一个结算日&…

Redis小白入门教程

Redis入门教程 1. Redis入门1.1 Redis简介1.2 Redis服务启动与停止1.2.1 Redis下载1.2.2 服务启动命令1.2.3 客户端连接命令1.2.4 修改Redis配置文件 2. Redis数据类型2.1 五种常用数据类型介绍2.1.1 字符串操作命令2.1.2 哈希操作命令2.1.3 列表操作命令2.1.4 集合操作命令2.1…

Java | Java中与文件同名的类的构造函数的调用

在Java的学习过程中遇到了这样一段代码&#xff1a; public class Test1 {int a1;public static void main(String []args){System.out.println("java");}public Test1(){System.out.println("构造函数");} }它的运行结果是这样的&#xff0c;构造函数中的…

进程与线程:通过实际生活来解析计算机的基本运作单位

进程与线程 进程与线程&#xff1a;详细解析计算机的基本运作单位1. 进程&#xff1a;独立的执行环境1.1 进程的特点&#xff1a; 2. 线程&#xff1a;轻量级的执行单元2.1 线程的特点&#xff1a; 3. 区别和联系4. 表格 进程与线程&#xff1a;详细解析计算机的基本运作单位 在…

win10安全中心误删文件怎么办?解析恢复与预防策略

在使用Windows 10的过程中&#xff0c;许多用户依赖于其内置的安全中心来保护电脑免受恶意软件的侵害。然而&#xff0c;有时安全中心的误判可能导致重要文件被错误地删除。当面对这种情况时&#xff0c;了解如何恢复误删的文件并掌握预防措施显得尤为重要。本文将为您详细解析…

LabVIEW高精度天线自动测试系统

LabVIEW高精度天线自动测试系统 系统是一个集成了LabVIEW软件的自动化天线测试平台&#xff0c;提高天线性能测试的精度与效率。系统通过远程控制测试仪表&#xff0c;实现了数据采集、方向图绘制、参数计算等功能&#xff0c;特别适用于对天线辐射特性的精确测量。 在天线的…

【C++】类的默认成员函数(上)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、默认成员函数二、构造函数构造函数的概念及特性 三、析构函数析构函数的特性…

介绍平衡准确率(Balance Accuracy)和加权 F1 值(Weighted F1)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 先复习一下查准率、召回率和 F1 分数&#xff1a; 查准率是对预测结果而言&#xff0c;每个类别模型预测正确的比例。 召回率是对样本标签而言&#xff0c;每个类别中有多少被预测正确了。 F1 分数是…

电机的极数和槽数,机械角度和电角度,霍尔IC,内外转子

什么是电机的极数和槽数&#xff1f; 【第7集】② 正弦波驱动的转矩脉动、正弦电流的时序和相位变化、超前角控制&#xff08;超前角调整&#xff09;、正弦波驱动的各种波形 - 电源设计电子电路基础电源技术信息网站_罗姆电源设计R课堂 (rohm.com.cn) 下面为您介绍表示电机…

算法【线性表的查找-折半查找/二分查找/对分查找】

线性表的查找-折半查找/二分查找/对分查找 折半查找概念查找过程折半查找算法: (非递归算法) 折半查找法的性能分析性能分析&#xff1a;平均查找长度ASL&#xff1a; 复杂度折半查找法的特点&#xff1a; 折半查找概念 折半查找&#xff0c;也称为二分查找&#xff0c;是一种…

【JS】解构赋值注意点,解构赋值报错

报错代码 const 小明 { email: 6, pwd: 66 } const 小刚 { email: 9, pwd: 99 }const { email } 小明 const { email } 小刚 报错图 原因 2个常量重复&#xff0c;重复在同一个作用域内是不能重复的&#xff0c;例如大括号内{const a 1; const a 2} 小伙伴A提问 问&…

从头构建gpt2 基于Transformer

从头构建gpt2 基于Transformer VX关注{晓理紫|小李子}&#xff0c;获取技术推送信息&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持&#xff01;&#xff01; 如果你感觉对你有所帮助&#xff0c;请关注我。 源码获取 VX关注晓理紫并回复“chatgpt…

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…

10 计算机结构

冯诺依曼体系结构 冯诺依曼体系结构&#xff0c;也被称为普林斯顿结构&#xff0c;是一种计算机架构&#xff0c;其核心特点包括将程序指令存储和数据存储合并在一起的存储器结构&#xff0c;程序指令和数据的宽度相同&#xff0c;通常都是16位或32位 我们常见的计算机,笔记本…

Android 性能优化--APK加固(1)混淆

文章目录 为什么要开启混淆如何开启代码混淆如何开启资源压缩代码混淆配置代码混淆后&#xff0c;Crash 问题定位结尾 本文首发地址&#xff1a;https://h89.cn/archives/211.html 最新更新地址&#xff1a;https://gitee.com/chenjim/chenjimblog 为什么要开启混淆 先上一个 …

计算机二级Python刷题笔记------基本操作题11、14、17、21、30(考察列表)

文章目录 第十一题&#xff08;列表遍历&#xff09;第十四题&#xff08;len&#xff09;第十七题&#xff08;len、insert&#xff09;第二十一题&#xff08;append&#xff09;第三十题&#xff08;二维列表&#xff09; 第十一题&#xff08;列表遍历&#xff09; 题目&a…

【RT-Thread应用笔记】英飞凌PSoC 62 + CYW43012 WiFi延迟和带宽测试

文章目录 一、安装SDK二、创建项目三、编译下载3.1 编译代码3.2 下载程序 四、WiFi测试4.1 扫描测试4.2 连接测试 五、延迟测试5.1 ping百度5.2 ping路由器 六、带宽测试6.1 添加netutils软件包6.2 iperf命令参数6.3 PC端的iperf6.4 iperf测试准备工作6.5 进行iperf带宽测试6.6…

力扣日记3.3-【回溯算法篇】332. 重新安排行程

力扣日记&#xff1a;【回溯算法篇】332. 重新安排行程 日期&#xff1a;2023.3.3 参考&#xff1a;代码随想录、力扣 ps&#xff1a;因为是困难题&#xff0c;望而却步了一星期。。。T^T 332. 重新安排行程 题目描述 难度&#xff1a;困难 给你一份航线列表 tickets &#xf…

NLP-词向量、Word2vec

Word2vec Skip-gram算法的核心部分 我们做什么来计算一个词在中心词的上下文中出现的概率&#xff1f; 似然函数 词已知&#xff0c;它的上下文单词的概率 相乘。 然后所有中心词的这个相乘数 再全部相乘&#xff0c;希望得到最大。 目标函数&#xff08;代价函数&#xff0…