【C++ Qt】常用输入类下:Combo Box/Spin Box/DataTimeEdit/Dial/Slide
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry”
绪论:
在Qt开发框架中,UI组件是构建用户交互界面的基石。本章将详细探讨Qt中常用的UI组件,包括下拉框(QComboBox)、微调框(QSpinBox/QDoubleSpinBox)、日期时间选择器(QDateTimeEdit)、旋钮(QDial)以及滑动条(QSlider)等。通过实际案例,我们将深入剖析这些组件的核心属性设置、关键方法调用以及信号机制应用,展示如何在实际项目中灵活组合与运用这些组件,以实现高效、美观且功能丰富的用户界面。
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。
Combo Box 下拉框
核⼼属性
属性 | 说明 |
---|---|
currentText | 当前选中的⽂本 |
currentIndex | 当前选中的条⽬下标(从 0 开始)从 0 开始计算。如果当前没有条⽬被选中, 值为 -1 |
editable | 是否允许修改 、设为 true 时, QComboBox 的⾏为就⾮常接近 QLineEdit , 也可以、设置 validator |
iconSize | 下拉框图标 (⼩三⻆) 的⼤⼩ |
maxCount | 最多允许有多少个条⽬ |
核⼼⽅法
通过方法去操作下拉框:
⽅法 | 说明 |
---|---|
addItem(const QString&) | 添加⼀个条⽬ |
currentIndex() | 获取当前条⽬的下标 从 0 开始计算. 如果当前没有条⽬被选中, 值为 -1 |
currentText() | 获取当前条⽬的⽂本内容 |
核⼼信号
⽅法 | 说明 |
---|---|
activated(int) | 当⽤⼾选择了⼀个选项时发出. |
activated(const QString & text) | 这个时候相当于⽤⼾点开下拉框, 并且⿏标划过某个选项. 此时还没有确认做出选择. (未选中的高亮效果) |
currentIndexChanged(int) | 当前选项改变时发出 |
currentIndexChanged(const QString & text) | 此时⽤⼾已经明确的选择了⼀个选项⽤⼾操作或者通过程序操作都会触发这个信号. |
editTextChanged(const QString & text) | 当编辑框中的⽂本改变时发出 (editable 为 true 时有效) |
下拉框实现点餐
- 三个label:请选择汉堡、小食、饮料
- 添加三个下拉框
- 增加一个按钮:提交
- 针对下拉框添加选项(
addItem
):- 麦辣鸡腿堡、巨无霸、双层牛堡
- 中薯条、麦乐鸡块、麦辣鸡块
- 可乐、雪碧
- 给按钮添加点击信号的信号槽
- 打印三个选项中当前选中的值
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->comboBox->addItem("麦辣鸡腿堡");ui->comboBox->addItem("巨无霸");ui->comboBox->addItem("双层牛堡");ui->comboBox_2->addItem("中薯条");ui->comboBox_2->addItem("麦乐鸡块");ui->comboBox_2->addItem("土豆泥");ui->comboBox_3->addItem("无糖可乐");ui->comboBox_3->addItem("可乐");ui->comboBox_3->addItem("雪碧");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{//打印查看选择的内容qDebug() <<"汉堡:" << ui->comboBox->currentText();qDebug() <<"小食:" << ui->comboBox_2->currentText();qDebug() <<"饮料:" << ui->comboBox_3->currentText();}
当把添加选项代码去掉,通过右击按钮然后选择编辑组合框选项进行添加
引入 文件进行 加载
下拉框里的内容,很多时候不是代码写死的,而是通过文件/网络加载数据得到的~
本次先了解如何通过文件获取
- 先准备一个文件config.txt,内部存着一些想要获取的内容(以换行分割)
- 拖拽一个label、一个下拉框
- 构造函数
- 需要读取文件内容,把文件中的每一行读取出来作为combo box的选项:
- 本质很c/c++中一样、使用
fstream
类进行文件读写,包含头文件:fstream - 使用
ifstream
(input输入)进行读取文件数据(路径) - 判断文件是否打开,失败打印日志,并返回
- 循环 按行读取文本内容
getline(流函数、输出参数)
- 取到的每一行内容,设置到下拉框中(
QString::fromStdString(string)
将String变成QString) - 关闭文件(别忘了~)
#include "widget.h"
#include "ui_widget.h"
#include <fstream>
#include <iostream>
#include <QDebug>
#include <string>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);std::ifstream file("D:/QtCode/qt-warehouse/Combo_2/config.txt");if(!file.is_open()){qDebug() << "打开文件失败!" ;return;}std::string str;while(std::getline(file,str)){
// ui->comboBox->addItem(QString(str.c_str()));//QString 内部只能通过 char* 所以是使用c_strui->comboBox->addItem(QString::fromStdString(str));//QString::fromStdString 将string装换成QString类型}file.close();//注意别忘了
}Widget::~Widget()
{delete ui;
}
输入输出的看待
Spin Box 微调框
使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰ “微调框”, 它是带有按钮的输⼊框. 可以⽤来输⼊整数/浮点数. 通过点击按钮来修改数值⼤⼩
由于 SpinBox 和 QDoubleSpinBox(小数) ⽤法基本相同, 就只介绍 SpinBox 的使⽤了
QSpinBox 关键属性
属性 | 说明 |
---|---|
value | 存储的数值. |
singleStep | 每次调整的 “步⻓”. 按下⼀次按钮数据变化多少. |
displayInteger | 数字的进制. 例如 displayInteger 设为 10, 则是按照 10 进制表⽰. 设为 2 则为 2 进制表⽰. |
minimum | 最⼩值 |
maximum | 最⼤值 |
suffix | 后缀(xxx 个) |
prefix | 前缀(第 xxx) |
wrapping | 是否允许换⾏ |
frame | 是否带边框 |
alignment | ⽂字对⻬⽅式. |
readOnly | 是否允许修改 |
buttonSymbol | 按钮上的图标 、UpDownArrows 上下箭头形式、UpDownArrows 上下箭头形式、NoButtons 没有按钮 |
accelerated (加速的) | 按下按钮时是否为快速调整模式 |
correctionMode | 输⼊有误时如何修正QAbstractSpinBox::CorrectToPreviousValue : 如果⽤⼾输⼊了⼀个⽆效的值(例如,在只能显⽰正整数的SpinBox中输⼊了负数),那么SpinBox会恢复为上⼀个有效值。例如,如果SpinBox的初始值是1,⽤⼾输⼊了-1(⽆效),然后SpinBox会恢复为1、QAbstractSpinBox::CorrectToNearestValue : 如果⽤⼾输⼊了⼀个⽆效的值,SpinBox会恢复为最接近的有效值。例如,如果SpinBox的初始值是1,⽤⼾输⼊了-1(⽆效),那么SpinBox会恢复为0 |
keyboardTrack | 是否开启键盘跟踪. 设为 true, 每次在输⼊框输⼊⼀个数字, 都会触发⼀次 valueChanged() 和 textChanged() 信号. 设为 false, 只有在最终按下 enter 或者输⼊框失去焦点, 才会触发 valueChanged() 和 textChanged() 信号 |
核⼼信号
信号 | 说明 |
---|---|
textChanged(QString) | 微调框的⽂本发⽣改变时会触发. 参数 QString 带有 前缀 和 后缀. |
valueChanged(int) | 微调框的⽂本发⽣改变时会触发. 参数 int, 表⽰当前的数值 |
实操微调框实现点餐
- 构造函数:
- 初始化下拉菜单
addItem
(和上面一样) - 设置范围
setRange
1 ~ 5 - 给按钮添加槽函数,打印每行的combobox的值和spinbox的值
- 初始化下拉菜单
#include "widget.h"
#include "ui_widget.h"
#include <fstream>
#include <iostream>
#include <QDebug>
#include <string>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->comboBox_2->addItem("麦辣鸡腿堡");ui->comboBox_2->addItem("巨无霸");ui->comboBox_2->addItem("...");ui->comboBox_3->addItem("薯条");ui->comboBox_3->addItem("土豆泥");ui->comboBox_3->addItem("...");ui->comboBox_4->addItem("无糖可乐");ui->comboBox_4->addItem("雪碧");ui->comboBox_4->addItem("...");ui->spinBox->setRange(1,5);ui->spinBox_2->setRange(1,5);ui->spinBox_3->setRange(1,5);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{qDebug() << "汉堡:" << ui->comboBox_2->currentText() << " " << ui->spinBox->text();qDebug() << "小食:" << ui->comboBox_3->currentText() << " " << ui->spinBox_2->text();qDebug() << "饮料:" << ui->comboBox_4->currentText() << " " << ui->spinBox_3->text();
}
DataTimeEdit
使⽤ QDateEdit 作为⽇期的微调框
QDateTimeEdit 核⼼属性
属性 | 说明 |
---|---|
dateTime | 时间⽇期的值. 形如 2000/1/1 0:00:00 |
date | 单纯⽇期的值. 形如 2001/1/1 |
time | 单纯时间的值. 形如 0:00:00 |
displayFormat | 时间⽇期格式(通过特殊字符来描述时间日期的格式). 形如 yyyy/M/d H:mm • y 表⽰年份 • M 表⽰⽉份 • d 表⽰⽇期 • H 表⽰⼩时 • m 表⽰分钟 • s 表⽰秒 注意: 这⾥的格式化符号的含义, 不要记忆. 不同语⾔/库的设定规则 是存在差异的. ⼀定是⽤的时候再去查(如:yyyy/M/d H:mm 2020/1/1 0:00) |
minimumDateTime | 最⼩时间⽇期 |
maximumDateTime | 最⼤时间⽇期 |
timeSpec(规范) | • Qt::LocalTime :显⽰本地时间。 • Qt::UTC :显⽰协调世界时(UTC 标准时间)。 • Qt::OffsetFromUTC :显⽰相对于UTC的偏移量(时差). |
关于 本地时间(LocalTime) 和 协调世界时(UTC)
UTC 时间是⼀个基于原⼦钟的标准时间. 不受地球的⾃转周期影响. 和格林威治时间 (GMT) 是
⾮常接近的. 科学家会通过精密的设备来测量并维护. 咱们的计算机内部使⽤的时间就是基于 UTC 时间,本地时间则是基于不同的时区, 对 UTC 时间做出了⼀些调整. ⽐如咱们使⽤的北京时间, 位于 “东⼋区”, 就需要在 UTC 时间基础上 +8 个⼩时的时差(英国 格林威治天文台)
核⼼信号
信号 | 说明 |
---|---|
dateChanged(QDate) | ⽇期改变时触发. |
timeChanged(QTime) | 时间改变时触发. |
dateTimeChanged(QDateTime) | 时间⽇期任意⼀个改变时触发. |
实例:时间计数器
计算两个时间中间相隔的多少天/多少小时
- 拖拽两个QDateTimeEdit、一个按钮、一个label显示结果
- 给按钮添加槽函数
- 两个时间日期控件通过dateTime获取时间
- 计算日期的差值
- 通过QDateTime的函数进行计算
- daysTo 计算时间的日期差值、secsTo 计算秒数的差值
- 其中对于秒数要换算成小时 seconds / 3600 % 24(求出小时,天数已经算过了所以余上24)
- 最终将计算结果放到label中,注意需要装换成QString
其中有点问题(因为在计算天数的过程中,只要天数发送改变就会增加天数,例如:23::55 到 0:05 时 即使只是过了10分钟但也会算一天)
所以将天数的计算改成使用秒数来进行计算:day = (seconds / 3600) / 24
源码:
#include "widget.h"
#include "ui_widget.h"
#include <iostream>
#include <string>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{QDateTime time1 = ui->dateTimeEdit->dateTime();QDateTime time2 = ui->dateTimeEdit_2->dateTime();//计算出 天数 和 小时//day,这里并不是使用int day = time1.daysTo(time2);//这里计算出天数int sec = time1.secsTo(time2);//计算出 time1 与 time2 的秒数差//因为day内部计算天数是有一定问题的day = sec / 3600 / 24;//使用秒数来计算int h = (sec / 3600) % 24;ui->label_2->setText("时间差值为:" + QString::fromStdString(std::to_string(day))+ "天" + QString::fromStdString(std::to_string(h)) + "小时");
}
网上找到一个计数器(验证):
Dial
使⽤ QDial 表⽰⼀个 旋钮(如下图)
有些程序, 通过⿏标拖动旋钮旋转, 即可完成⼀些相关的设置:
核⼼属性
属性 | 说明 |
---|---|
value | 持有的数值. |
minimum | 最⼩值 |
maximum | 最⼤值 |
singleStep | 按下⽅向键的时候改变的步⻓. |
pageStep | 按下 pageUp / pageDown 的时候改变的步⻓. |
sliderPosition | 界⾯上旋钮显⽰的 初始位置 |
tracking | 外观是否会跟踪数值变化. 默认值为 true. ⼀般不需要修改. |
wrapping | 是否允许循环调整. 即数值如果超过最⼤值, 是否允许回到最⼩值. (调整过程能否 “套圈”) |
notchesVisible | 是否显⽰ 刻度线 |
notchTarget | 刻度线之间的相对位置. 数字越⼤, 刻度线越稀疏. |
核⼼信号
属性 | 说明 |
---|---|
valueChanged(int) | 数值改变时触发 |
rangeChanged(int, int) | 范围变化时触发 |
实操:通过旋钮控制窗口的不透明度
-
拖拽一个dial控件
-
设置范围:0 ~ 100、初始为100、wrapping(允许套圈 当超过最大值变回最小值)、刻度线
-
使用valueChanged信号进行创建信号槽,参数int就是当前的value值
-
其中注意设置的value是整数0~100,而WindowsOpacity内部是一个 0 ~ 1 的小数,所以我们需要给value / 100,变成 0 ~ 1 的小数
源码:
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_dial_valueChanged(int value)
{//将value的值设置成窗口的透明度 Opacity//但注意的是 Opacity 的范围是 0 ~ 1//而我们的value是0 ~ 100 所以需要除以 100double temp = value / 100.00;this->setWindowOpacity(temp);//并且将透明度设置到label上ui->label->setText("当前不透明度:"+ QString::number(temp * 100));}
Slider 滑动条
使⽤ QSlider 表⽰⼀个滑动条.
QSlider 和 QDial 都是继承⾃ QAbstractSlider , 因此⽤法上基本相同.
核⼼属性:
属性 | 说明 |
---|---|
value | 持有的数值. |
minimum | 最⼩值 |
maximum | 最⼤值 |
singleStep | 按下⽅向键的时候改变的步⻓. |
pageStep | 按下 pageUp / pageDown 的时候改变的步⻓. |
sliderPosition | 滑动条显⽰的 初始位置 |
tracking | 外观是否会跟踪数值变化. 默认值为 true. ⼀般不需要修改. |
orientation | 滑动条的⽅向是⽔平还是垂直 |
invertedAppearance | 是否要翻转滑动条的⽅向 |
tickPosition | 刻度的位置. |
tickInterval | 刻度的密集程度. |
核⼼信号
属性 | 说明 |
---|---|
valueChanged(int) | 数值改变时触发 |
rangeChanged(int, int) | 范围变化时触发 |
实操:通过两个滑动条控制窗口大小
- 拖拽两个Slider滑动条(Horizontal水平的、Vertical垂直的)
- 并且将垂直的滑动条进行翻转(invertedappearance 设置的值符合常理:上到下是减少,默认是从下到上的)
- 初始化:
- 设置范围:给水平的值设为 100 ~ 1000(
minimum/maxmum
),初始为800(sliderPosition
),⽅向键改变的步⻓为50(singleStep
)、垂直的值设为 100 ~ 1500,初始化为600,⽅向键改变的步⻓为50
- 设置范围:给水平的值设为 100 ~ 1000(
- 水平滑动条通过valueChanged信号设置信号槽
- 通过Geometry属性方法获取得到QRect对象
- 在保持高很位置不变的情况,将参数value的值设置为窗口的宽度
setGeometry
- 水平:
- 同上操作,只不过修改的是高度
源码:
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_horizontalSlider_valueChanged(int value)
{//设置窗口大小 GeometryQRect rect = this->geometry();this->setGeometry(rect.x(),rect.y(),value,rect.height());
}void Widget::on_verticalSlider_valueChanged(int value)
{//设置窗口大小 GeometryQRect rect = this->geometry();this->setGeometry(rect.x(),rect.y(),rect.width(),value);
}
自定义快捷键 QShotCut
这里直接根据上一个的水平Slide添加快捷键
- 构造函数中通过
QShotCut
类定义快捷键:- 需要两个快捷键,- 进行减少,+ 进行增加
- 创建
QShortCut
对象 - 通过该对象的
setKey
方法进行设置,内部参数填写QKeySequence
(“-”)、… “+”
- 使用信号槽,感知快捷键被触发
- 使用
QShortCut::activated
信号,调用自身编写的槽函数subValue - 同上添加槽函数 addValue
- 使用
- 槽函数:subValue/addValue
- 获取当前的Slide中的值,
value
- 获取当前slide设置的步长
signalStep
- 设置
setValue中
的值,每次对原value增加或者减少step步长的值
- 获取当前的Slide中的值,
源码:
#include "widget.h"
#include "ui_widget.h"
#include <QShortcut>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置快捷键QShortcut* sub = new QShortcut(this);sub->setKey(QKeySequence("-"));QShortcut* add = new QShortcut(this);add->setKey(QKeySequence("+"));connect(sub,&QShortcut::activated,this,&Widget::subValue);connect(add,&QShortcut::activated,this,&Widget::addValue);
}Widget::~Widget()
{delete ui;
}void Widget::subValue()
{//获取当前Slide的值int value = ui->horizontalSlider->value();//减少步长的值int step = ui->horizontalSlider->singleStep();ui->horizontalSlider->setValue(value-step);
}void Widget::addValue()
{//获取当前Slide的值int value = ui->horizontalSlider->value();//减少步长的值int step = ui->horizontalSlider->singleStep();ui->horizontalSlider->setValue(value+step);
}void Widget::on_horizontalSlider_valueChanged(int value)
{//设置窗口大小 GeometryQRect rect = this->geometry();this->setGeometry(rect.x(),rect.y(),value,rect.height());
}void Widget::on_verticalSlider_valueChanged(int value)
{//设置窗口大小 GeometryQRect rect = this->geometry();this->setGeometry(rect.x(),rect.y(),rect.width(),value);
}
本章完。预知后事如何,暂听下回分解。
如果有任何问题欢迎讨论哈!
如果觉得这篇文章对你有所帮助的话点点赞吧!
持续更新大量C++ Qt细致内容,早关注不迷路。
相关文章:
【C++ Qt】常用输入类下:Combo Box/Spin Box/DataTimeEdit/Dial/Slide
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 在Qt开发框架中,UI组件是构建用户交互界面的基石。本章将详细探讨Qt中常用的UI组件,包括下拉框(QComboBoxÿ…...
基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
目录 1 时空解耦运动规划2 PJSO速度规划原理2.1 优化变量2.2 代价函数2.3 约束条件2.4 二次规划形式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 时空解耦运动规划 在自主移动系统的运动规划体系中,时空解耦的递进式架构因其高效性与工程可实现性被广泛采用。这一架…...
K8s 常用命令、对象名称缩写汇总
K8s 常用命令、对象名称缩写汇总 前言 在之前的文章中已经陆续介绍过 Kubernetes 的部分命令,本文将专题介绍 Kubernetes 的常用命令,处理日常工作基本够用了。 集群相关 1、查看集群信息 kubectl cluster-info # 输出信息Kubernetes master is run…...
C++编程语言:从高效系统开发到现代编程范式的演进之路
目录 前言一、c简介1.1 起源1.2 c的特点 二、开发环境搭建 2.1. 安装 Qt 开发工具2.2 修改编码环境 2.3创建第一个 Qt 项目2.4 c的编译过程2.5 代码示例 2.6 qt疑难杂症 2.6.1 遇到无法删除代码,一点击光标就变成小黑块2.6.2 遇到运行不弹出终端 编辑 2.6.3 遇到…...
OpenCV进阶操作:角点检测
文章目录 一、角点检测1、定义2、检测流程1)输入图像2)图像预处理3)特征提取4)角点检测5)角点定位和标记6)角点筛选或后处理(可选)7)输出结果 二、Harris 角点检测&#…...
广州华锐视点邀您参与2025广交会VRAR展【5月10-12日】
2025 广交会数字显示与元宇宙生态博览会暨第 9 届世界 VR&AR 展将在广州盛大举行 。时间:2025 年 5 月 10 日至 12 日,广州华锐视点作为一家深耕 VR、AR、AI、元宇宙内容制作领域的企业,也将携旗下众多创新产品和解决方案闪耀登场&#x…...
mac m2 安装 hbase
默认安装好了 homebrew。 1. 终端先更新下 homebrew brew upgrade再安装 hbase brew install hbase 安装完会有如下图的内容 2. 按照提示启动 hbase brew services start hbase返回启动成功 3. 访问 http://localhost:16010 检验一下 启动成功 4. 在启动 hbase shell之…...
k8s node 报IPVS no destination available
在 Kubernetes 集群中,IPVS no destination available 错误通常表示 kube-proxy(IPVS 模式)无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发,影响服务可用性。以下是详细的排查和解决方法: 一、错误原因…...
MySQL 中 EXISTS (SELECT 1 FROM ...) 的用法详解
EXISTS (SELECT 1 FROM ...) 是 MySQL 中用于存在性检查的核心语法,其核心逻辑是判断子查询是否返回至少一行数据。以下从作用原理、使用场景、性能优化等方面展开解析,并结合具体示例说明。 1. 基本语法与作用原理 语法结构: SELECT 列名 F…...
荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)
作者:曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能,也就是开发与运营之间的桥梁。它既不直接参与玩家行为,又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…...
前端-HTML+CSS+JavaScript+Vue+Ajax概述
HTML(超文本标记语言)常见标签 <html><head> <title>这是标题的内容,显示在浏览器的头部</title></head><body><!-- 这里面的内容在浏览器显示给用户看 --><!-- h1 -> h6 : 标题从大到小 …...
20250506格式化NanoPi NEO开发板使用Ubuntu core16.04系统的TF启动卡
https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip 20250506使用SDCardFormatter工具格式化NanoPi NEO开发板使用Ubuntu core16.04系统的TF启动卡 2025/5/6 20:04 缘起:使用友善之臂的NanoPi NEO开发板,制作了Ubunt…...
信息时代的政治重构:网络空间与主权的未来
一、网络空间:暴力垄断的终结 无边界主权的崛起 网络空间作为“第五阶段”的暴力竞争场域,打破传统领土垄断。政府无法像控制物理世界那样垄断网络暴力,类似公海的法律真空状态。 边区类比:中世纪的安道尔(法西共管避…...
Kotlin重构Android项目实践
以下是使用 Kotlin 重构 Android 项目的 5 个常见场景实践,通过对比 Java 实现方式,展示 Kotlin 的简洁性和现代特性: 场景 1:数据类替代 Java POJO Java 传统实现: public class User {private String name;private…...
Vue + Element UI 表单弹窗输入法卡顿问题解决方案
Vue Element UI 表单弹窗输入法卡顿问题解决方案 前言 在使用 Vue 和 Element UI 开发后台管理系统时,经常会遇到 el-dialog 弹出表单对话框的场景。然而,很多开发者可能会遇到一个棘手的问题:当调用 resetFields() 方法重置表单时&#x…...
ubantu安装CUDA
想要通过llama.cpp的方式跑deepseek R1模型。在按照https://huggingface.co/unsloth/DeepSeek-R1-GGUF教程去配环境时报错了。具体如下: (base) oemcore:~/Desktop/deepseek_llama.cpp$ sudo cmake llama.cpp -B llama.cpp/build -DBUILD_SHARED_LIBSOFF -DGGM…...
Python生活手册-Numpy多维数组构建:从快递分拣到智能家居的数据变形术
一、快递分拣系统(基础构建) 1. 电子面单生成(列表转数组) import numpy as np手工录入的快递单号 纸质单号 [["SF123", "JD456", "EMS789"],["YT012", "ZT345", "YZ6…...
数据库的范围查询
范围查询 B树迭代器 迭代器接口 B树的基本操作包括用于范围查询的查找和迭代。B树的位置由状态化的迭代器 BIter 表示。 // 查找小于或等于输入键的最近位置 func (tree *BTree) SeekLE(key []byte) *BIter// 获取当前键值对 func (iter *BIter) Deref() ([]byte, []byte)/…...
JS DAY4 日期对象与节点
一日期对象 日期对象:用来表示时间的对象 作用:可以得到当前系统时间 1.实例化 在代码中发现了 new 关键字时,一般将这个操作称为实例化 创建一个时间对象并获取时间 时间必须实例化 获得当前时间 const date new Date() 获得指定时间 const date new Date(…...
【Leetcode 每日一题 - 补卡】1007. 行相等的最少多米诺旋转
问题背景 在一排多米诺骨牌中, t o p s [ i ] tops[i] tops[i] 和 b o t t o m s [ i ] bottoms[i] bottoms[i] 分别代表第 i i i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 1 1 到 6 6 6 的数字同列平铺形成的 —— 该平铺的每一半…...
Android设备运行yolov8
放假这几天搞了一个基于uniapprk3588实现了一版yolo检测 这个是基于前端调用后端api来实现,感觉还可以,但是需要有网络才能进行图像检测,网络不稳定就会出现等待时间会比较久的问题,然后有做了一个在做了一个Android版本的图像检…...
Debezium MySqlValueConverters详解
Debezium MySqlValueConverters详解 1. 类的作用与功能 1.1 核心作用 MySqlValueConverters是Debezium中负责MySQL数据类型转换的核心类,主要功能包括: 数据类型映射:将MySQL的数据类型映射到Kafka Connect的Schema类型值转换:将MySQL的原始值转换为Kafka Connect可用的…...
Redis从入门到实战——实战篇(下)
四、达人探店 1. 发布探店笔记 探店笔记类似于点评网站的评价,往往是图文结合。对应的表有两个: tb_blog:探店笔记表,包含笔记中的标题、文字、图片等tb_blog_comments:其他用户对探店笔记的评价 步骤①࿱…...
算法中的数学:质数(素数)
1.质数 1.1定义 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除,那么他就是质数,否则他就是合数。 注意:1既不是质数也不是合数 唯一的偶质数是2,其余所有质数都是奇质数 1.2质数判定求法 试除法…...
linux、window安装部署nacos
本文以nacos 2.2.0为例 文章目录 1.下载安装包2.按需修改配置配置单机模式配置内存 -Xms -Xmx -Xmn配置数据库为MySQL 3. 访问http://ip:8848/nacos4.常见问题找不到javac命令 1.下载安装包 打开官网,下载2.2.0版本 2.按需修改配置 配置单机模式 默认集群模式&…...
C++ 外观模式详解
外观模式(Facade Pattern)是一种结构型设计模式,它为复杂的子系统提供一个简化的接口。 概念解析 外观模式的核心思想是: 简化接口:为复杂的子系统提供一个更简单、更统一的接口 降低耦合:减少客户端与子…...
42. 接雨水(相向双指针/前后缀分解),一篇文章讲透彻
给定一个数组,代表柱子的高度 求出下雨之后,能接的水有多少单位。我们将每一个柱子想象成一个水桶,看他能接多少水 以这个水桶为例,他所能接的水取决于左边的柱子的最大高度和右边柱子的最大高度,因为只有柱子高的时候…...
vue实现AI问答Markdown打字机效果
上线效果 功能清单 AI问答,文字输出跟随打字机效果格式化回答内容(markdown格式)停止回答,复制回答内容回答时自动向下滚动全屏切换历史问答查看 主要技术 vue 2.7.1markdown-it 14.1.0microsoft/fetch-event-source 2.0.1high…...
【QT】QT中的事件
QT中的事件 1.事件的定义和作用2.QT中事件产生和派发流程2.1 步骤2.2 图示示例代码:(event函数接收所有事件) 3.常见的事件3.1 鼠标事件示例代码:现象: 3.2 按键事件3.3 窗口大小改变事件 4.举例说明示例代码ÿ…...
【QT】QT中的软键盘设计
QT的软键盘设计 1.软键盘制作步骤2.介绍有关函数的使用3.出现的编译错误及解决办法示例代码1:按键事件实现软键盘现象:示例代码2:按键事件实现软键盘(加特殊按键)现象: 软键盘移植到新的工程的步骤…...
【Unity】一个AssetBundle热更新的使用小例子
1.新建两个预制体: Cube1:GameObject Material1:Material Cube1使用了Material1材质 之后设置打包配置 Cube1的打包配置为custom.ab Material1的打包配置为mat.ab 2.在Asset文件夹下创建Editor文件夹,并在Editor下创建BuildBundle…...
【Bootstrap V4系列】学习入门教程之 组件-按钮组(Button group)
Bootstrap V4系列 学习入门教程之 组件-按钮组(Button group) 按钮组(Button group)一、Basic example二、Button toolbar 按钮工具条三、Sizing 尺寸四、Nesting 嵌套五、Vertical variation 垂直变化 按钮组(Button …...
Linux进程间的通信
IPC 即 Inter-Process Communication,也就是进程间通信,它指的是在不同进程之间进行数据交换和协调同步的机制。在操作系统里,每个进程都有自己独立的内存空间,一般情况下不能直接访问其他进程的内存,所以需要借助 IPC…...
常用非对称加密算法的Python实现及详解
非对称加密算法(Asymmetric Encryption)使用公钥加密、私钥解密,解决了对称加密的密钥分发问题。本文将详细介绍 RSA、ECC、ElGamal、DSA、ECDSA、Ed25519 等非对称加密算法的原理,并提供Python实现代码及安全性分析。 1. 非对称加…...
【题解-洛谷】B4303 [蓝桥杯青少年组省赛 2024] 字母移位
题目:B4303 [蓝桥杯青少年组省赛 2024] 字母移位 题目描述 字母移位表示将字母按照字母表的顺序进行移动。 例如, b \texttt{b} b 向右移动一位是 c \texttt{c} c, f \texttt{f} f 向左移动两位是 d \texttt{d} d。 特别地,…...
详讲viewer查看器
将Python与Cesium结合起来,可以实现高效的数据处理与可视化展示。本文将详细介绍如何在Python环境中集成Cesium,以及实现数据可视化的具体方法。 我们可以通过在app.vue中的修改来更改我们查看器的显示方法 修改前 修改后 还可以进行各式各样的自定义操作…...
开关电源原理
开关电源原理 一、 开关电源的电路组成: 开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短…...
数据库的并发控制
并发控制 12.1 并发级别 问题:交错的读写 并发客户端可以随意进入和退出事务,并在中途请求读取和写入。为了简化分析,假设enter/exit/read/write是原子步骤,因此并发事务只是这些步骤的交错。 我们还将区分只读事务和读写事务…...
力扣第448场周赛
赛时成绩如下: 这应该是我力扣周赛的最好成绩了(虽然还是三题) 1. 两个数字的最大乘积 给定一个正整数 n。 返回 任意两位数字 相乘所得的 最大 乘积。 注意:如果某个数字在 n 中出现多次,你可以多次使用该数字。 示例 1: 输入࿱…...
关于Python:9. 深入理解Python运行机制
一、Python内存管理(引用计数、垃圾回收) Python(CPython)采用的是: “引用计数为主,垃圾回收为辅” 的内存管理机制。 也就是说: 引用计数机制:负责大部分内存释放,简…...
Cron表达式的用法
最近几天开发东西用到了定时脚本的问题,中间隔了一段时间没有用到,再次复习一下Cron表达式的用法。 Cron表达式是一种用于定义定时任务执行时间的字符串格式,广泛应用于Unix/Linux系统以及各种编程语言中。其主要用途是通过灵活的时间规则来…...
手机通过局域网访问网狐接口及管理后台网站
1.本地部署接口及后台网站 2.设置允许网站端口通过防火墙 3.查看网站服务器IP 4.手机连接到本地服务器同一局域网 5.手机访问本地服务器接口...
JavaSE核心知识点01基础语法01-01(关键字、标识符、变量)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点01基础语法01-01࿰…...
Sliding Window Attention(Longformer)
最简单的自注意力大家肯定都会啦。 但这种全连接的自注意力(即每个 token 需要 attend 到输入序列中的所有其他 token)计算与内存开销是 O ( n 2 ) O(n^2) O(n2) 。为了缓解这个问题,研究者们提出了 Sliding Window Attention。 Sliding W…...
ROS2 开发踩坑记录(持续更新...)
1. 从find_package(xxx REQUIRED)说起,如何引用其他package(包) 查看包的安装位置和include路径详细文件列表 例如,xxx包名为pluginlib # 查看 pluginlib 的安装位置 dpkg -L ros-${ROS_DISTRO}-pluginlib | grep include 这条指令的目的是…...
刷leetcodehot100返航版--哈希表5/5、5/6
回顾一下之前做的哈希,貌似只有用到 unordered_set:存储无序元素unordered_map:存储无序键值对 代码随想录 常用代码模板2——数据结构 - AcWing C知识回顾-CSDN博客 1.两数之和5/5【30min】 1. 两数之和 - 力扣(LeetCode&am…...
嵌入式开发学习日志Day13
第九章 预处理命令 前面加“#”的都为预处理命令; 预处理命令是无脑的文本替换; 一、宏定义 1、不带参数的宏定义 一般形式为: #define 标识符 字符串 (谷歌规定):所有的宏名均大写,便于…...
AI预测的艺术品走势靠谱吗?
首席数据官高鹏律师团队 AI预测艺术品价格走势:技术与法律的双重考量在当今数字化浪潮席卷全球的时代,人工智能(AI)技术正以前所未有的速度渗透到各个领域,艺术品市场也不例外。AI预测艺术品价格走势这一新兴事物&…...
AVL树 和 红黑树 的插入算法
1.AVL树 按照二叉搜索树的规则找到要插入的位置并插入,插入过后看是父节点的左还是右孩子,然后把父节点的平衡因子-1或1,调整后如果父节点的平衡因子是0,那就说明这颗子树的高度插入前后不变,上面的就不用调整平衡因子…...
【项目】基于ArkTS的网吧会员应用开发(1)
一、效果图展示 二、界面讲解 以上是基于ArkTS的鸿蒙应用网吧会员软件的引导页,使用滑动组件滑动页面,至最后一页时,点击立即体验,进入登录页面。 三、代码演示 import promptAction from ohos.promptAction; import router fr…...