Qt 入门 5 之其他窗口部件
Qt 入门 5 之其他窗口部件
- 本文介绍的窗口部件直接或间接继承自 QWidget 类
- 详细介绍其他部件的功能与使用方法
1. QFrame 类
-
QFrame类是带有边框的部件的基类。它的子类包括最常用的标签部件QLabel另外还有 QLCDNumber、QSplitter,QStackedWidget,QToolBox 和 QAbstractScrol1Area类。QAbstractScrollArea类是所有带有滚动区域的部件类的抽象基类,这里需要说明,Qt中凡是带有Abstract字样的类都是抽象基类。抽象基类是不能直接使用的,但是可以继承该类实现自己的类,或者使用它提供的子类。QAbstractScrollArea的子类中有最常用的文本编辑器类QTextEdit类和各种项目视图类,这些类会在后面章节中接触到,这里不再讲解
-
带边框部件最主要的特点就是可以有一个明显的边界框架。QFrame类的主要功能就是用来实现不同的边框效果,这主要是由边框形状(Shape)和边框阴影(Shadow)组合来形成的。QFrame类中定义的主要边框形状如表3-1所列,边框阴影如表3-2所列。这里要说明两个名词:lineWidth和midLineWidth,其中,lineWidth是边框边界线的宽度;而midlineWidth是在边框中额外插入的一条线的宽度,这条线的作用是为了形成3D效果,并且只在Box、Hline和VLine 表现为凸起或者凹陷时有用。QFrame的这些元素组合成的所有边框效果如图3-12所示。
-
下面在程序中演示一下具体效果。新建 Qt Widgets应用项目,命名为 myframe,完成后进入项目.ui文件 拖一个 Frame到界面上,后打开mywidget.ui文件,在Qt设计器中从部件列表里拖入一个Frame 到界面上,然后在右下方的属性栏中更改其
frameShape为Box,frameShadow为Sunken,lineWidth为5,midLineWidth为10。
在属性栏中设置部件的属性,这和在源码中用代码实现是等效的,其实也可以直接在mywidget.cpp
文件中的MyWidget构造函数里使用如下代码来代替:
//与ui设计等效ui->frame->setFrameShape(QFrame::Box);ui->frame->setFrameShadow(QFrame::Sunken);//以上两个函数可以使用setFrameStyle(QFrame::Box|QFrame::Sunken)代替ui->frame->setLineWidth(5);ui->frame->setMidLineWidth(10);
-
效果如下:
-
下面要讲的部件大都是Qt 的标准部件,所以大多会在Qt设计器中直接设置其属性,同样也可通过相应的代码实现。
-
对于QFrame的子类,都继承了他的边框设置功能。
1.1 QLabel
-
标签QLabel部件用来显示文本或者图片。在设计器中向界面拖入一个Label,然后将其拖大点,并在属性栏中设置对其方式alignment的属性,水平的改为AlignHCenter,垂直的改为 AlignVCenter,这样QLabel中的文本就会在正中间显示。
-
font属性可以对字体进行设置,也可以通过代码进行设置,下面打开mywidget.cpp文件,在构造函数中添加如下代码:
//QLabelQFont font;font.setFamily("华文行楷");font.setPointSize(20);font.setBold(true);font.setItalic(true);ui->label->setFont(font);
- QFont类提供了对字体的设置,这里使用了“华文行楷”字体族、大小为20、加粗斜体,通过QLabel的setFont()函数可以使用新建的字体
- QLabel属性栏中的wordWrap属性可以实现文本的自动换行。如果文本过长时不想自动换行,而是在后面自动省略,那么可以使用QFontMetrics类,该类用来计算给定字体的字符或字符串的大小,其中包含了多个实用函数。要使用QFontMetrics,则可以通过创建对象的方式,或通过QWidget::fontMetrics()来返回当前部件字体的QFontMetrics对象。下面继续在构造函数中添加代码:
QString string=tr("标题太长,需要进行省略!");QString str=ui->label->fontMetrics().elidedText(string,Qt::ElideRight,180);ui->label->setText(str);
- QFontMetrics 类的elidedText()函数用来进行文本省略,第一个参数用来指定要省略的文本;第二个参数是省略模式,就是“…”省略号出现的位置,包括Qt;:Elidel,eft出现在文本开头、Qt::ElideMiddle出现在文本中间,以及这里使用的 Qt;:ElideRight出现在文本末尾;第三个参数是文本的长度,单位是像素,只要第一个参数指定的文本的长度超过了这个值,就会进行省略。可以运行程序,调整参数值,从而查看不同参数的效果。
- QLabel属性栏中的scaledContents属性可以实现缩放标签中的内容,比如在标签中放一张较大的图片,则可以选中该属性来显示整个图片。下面来看一下怎么在标签中使用图片。首先在mywidget.cpp文件中添加头文件#include,然后在构造函数中添加一行代码:
ui->label->setPixmap(QPixmap("E:/logo.png"));
- 那么只需要使用相对路径logo.png就可以了。其实,最好的方法是使用资源管理器,将图片放到程序中,这会在第5章讲述。QLabel中还可以显示gif动态图片,在mywidget.cpp中添加头文件#include ,然后在myWidget 的构造函数中继续添加代码:
QMovie * movie=new QMovie("E:/donghua.gif");
ui->label->setMovie(move); //在标签中添加动画
movie->start(); //开始播放
1.2 QLCDNumber
- QLCDNumber部件可以让数码字符显示类似液晶数字一样的效果。从部件栏中拖入一个 LCD Number部件到界面上,然后更改其属性:选中smallDecimalPoint 项这样可以显示小数点;digitCount的作用是设置显示的数字的个数,设置为7,表示要显示7个数字;mode选Dec表示显示十进制数值,这里还可以设置显示为十六进制(Hex)、八进制(Oct)和二进制(Bin)数值;segmentStyle用来设置数码的显示样式,这里提供了3种样式,选择Filed;最后将value设置为456.123,这就是要显示的数值,也可以在代码中使用display()函数来设置要显示的数值。设置好后,运行程序查看效果。在 QLCDNumber中可以显示的数码有0/0、1、2、3、4、5/S、6、7、8、9/g、负号、小数点、A、B、C、D、E、F、h、H、L、o、P、r、u、U、Y、冒号、度符号(输人时使用单引号来代替)和空格
1.3 QStackedWidget
-
QStackedWidget类提供了一个部件栈,可以有多个界面(称为页面),每个界面可以拥有自己的部件,不过每次只能显示一个界面。这个部件需要使用QComboBox或者 QListWidget来选择它的各个页面。在设计模式中向界面上拖入一个List Widget和一个 Stacked Widget。在 List Widget上右击,在弹出的级联菜单中选择“编辑项目”项,然后在“编辑列表窗口部件”对话框中按下左下角的加号添加两项,并更该名称为“第一页”和“第二页”。然后在 Stacked Widget 上拖入一个 Label,更改文本为“第一页”,再单击 Stacked Widget 右上角的小箭头进入下一页,再拖入一个标签,更改文本为“第二页”。然后再将 Stacked Widget部件的frameShape 属性更改为 StyledPanel.最后,在信号和槽设计模式将listWidget部件的currentRowChanged()信号和stackedWidget的 setCurrentIndex()槽关联。设置完成后运行程序可以看到,现在可以单击 listWidget中的项目来选择stackedWidget的页面了。可以在设计模式中在 stackedWidget 上右击来为它添加新的页面
-
运行如下:
1.4 QToolBox
- QTooIBox类提供了一列层叠窗口部件,就像常用的聊天工具 QQ中的抽屉效果从部件栏中选择ToolBox拖入到界面上,右击并在弹出的级联菜单中选择“插入页一在当前页之后”项来新插入一页。然后更改其frameShape属性为Box,并分别单击各个页的标签,更改其 currentltemText 分别为“好友”、“黑名单”和“陌生人”。完成后可以运行程序查看效果
2.按钮部件
- QAbstractButton类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括复选框 QCheckBox、标准按钮 QPushButton、单选框按钮 QRadioButton 和工具按钮 QToolButton。QToolButton会在后边讲到,这一小节的内容可以参考示例程序Group Box Example.
- 新建QtWidgets应用,项目名称mybutton,基类选择QWidget,类名设为MyWidget。完成后在项目文件夹中新建images 文件夹,并且放入几张图标图片,供下面编写程序时使用。
2.1 QPushButton
QPushButton 提供一个标准按钮。在项目中打开mywidget.ui文件,拖入3个PushButton 到界面上,然后将它们的objectName 依次更改为pushBtn1、pushBtn2和pushBtn3。下面选中pushBtn1的checkable属性,使得它可以拥有“选中”和“未选中”两种状态;再选中pushBtn2的flat属性,可以不显示该按钮的边框,然后转到pushBtn1 的toggled(bool)信号的槽,更改如下:
void MyWidget::on_pushButton1_toggled(bool checked) //按钮是否处于被按下状态
{qDebug()<<tr("按钮是否被按下:")<<checked;
}
-
运行如下,当pushBtn1 处于按下状态的时候,checked 为true,否则为false。
-
下面再MyWidget类构造函数中添加代码:
MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);ui->pushButton1->setText(tr("&nihao"));ui->pushButton2->setText(tr("帮助&H"));//ui->pushButton2->setIcon(QIcon("../mybutton/images/help.png"));ui->pushButton3->setText(tr("z&oom"));QMenu* menu=new QMenu(this);menu->addAction(QIcon("../mybutton/images/zoom-in.png"),tr("放大"));ui->pushButton3->setMenu(menu);}
- 代码里为3个按钮改变了显示文本,在一个字母前加上“&”符号,则可以将这个按钮的加速键设置为Alt加上这个字母。如果要在这个文本中显示“&”符号,可以使用"&&"。也可以i使用setIcon()函数来给按钮添加图标,这里的图片文件使用了相对路径(当然也可以在设计模式通过更改icon属性来实现)。对于pushBtn3,这里为其添加了下拉菜单,现在这个菜单什么功能也没实现,运行程序可以查看效果如下:
2.2 QCheckBox、QRadioButton 和 QGroupBox
- 对于调查表之类的应用,往往提供多个选项供选择,有些是可以选择多项的,有些只能选择其中一项。复选框 QCheckBox类提供了同时选择多项的功能,而QRadioButton 提供了只能选择一项的功能,一般要把一组按钮放到一个QGroupBox中来管理。
- 在设计模式时可往界面上拖入两个GroupBox,将它们的标题分别改为“复选框和“单选框”。然后往复选框中拖人3个CheckBox,分别更改显示内容为“跑步”、“踢球”和“游泳”。再往单选框中拖入3个RadioButton,分别更改其显示内容为“很好”“一般”和“不好”。这里还可以选中CheckBox的tristate属性,让它拥有不改变状态选中状态和未选中状态3种状态。对于选择按钮后的操作,可以关联它们的state-Changed()信号和自定义的槽,也可以使用isChecked()函数查看一个按钮是否被选中。除了 Group Box,还可以使用 QButtonGroup 类来管理多个按钮。
3. QLineEdit
- 行编辑器 QLineEdit部件是一个单行的文本编辑器,它允许用户输入和编辑单行的纯文本内容,而且提供了一系列有用的功能,包括撤销与恢复,剪切和拖放等操作其中,剪切复制等功能是行编辑自带的,不用自己编码实现,拖放功能会在第5章讲到这部分内容可以查看Qt的示例程序Line Edits。
- 新建Qt Widgets应用,项目名称 mylineedit,基类QWidget,类名MyWidget。在设计模式时可往界面上拖入几个标签和 Line dit,设计界面如图3-13所示。然后将4个Line Edit 从上到下依次更改其objectName 为lineEditl 、lineEdit2 、lineEdit3 和 lineEdit4
3.1 显示模式
-
行编辑器QLineEdit 有四种显示模式(echoMode),可以echoMode属性中更改他们,分别是:
- Normal正常显示输入的信息;
- NoEcho不显示任何输人,这样可以保证不泄露输入的字符位数;
- Password显示为密码样式,就是以小黑点或星号之类的字符代替输人的字符;
- PasswordEchoOnEdit在编辑时显示正常字符,其他情况下显示为密码样式。- 这里设置lineEditl的echoMode为Password。
3.2 输入掩码
-
QLineEdit 提供了输入掩码(inputMask)来限制输入的内容。可以使用一些特殊的字符来设置输入的格式和内容,这些字符中有的起限制作用且必须要输入一个字符,有的只是起限制作用,但可以不输入字符而是以空格代替。
-
先来看一下这些特殊字符的含义:
-
在lineEdit2上右击,然后转到它的returnPressed()回车键按下信号的槽中,更改如下:
void MyWidget::on_lineEdit2_returnPressed() //回车键按下信号的槽
{ui->lineEdit3->setFocus(); //让lineEdit3 获取焦点qDebug()<<ui->lineEdit2->text(); //输出lineEdit的内容qDebug()<<ui->lineEdit2->displayText(); //输出lineEdit2显示的内容
}
3.3 输入验证
- 在QLineEdit 中还可以使用验证器(validator)来对输入进行约束。在mywidget.cpp 文件的构造函数中添加代码:
//新建验证器,指定范围 100-999QValidator* validator=new QIntValidator(100,999,this);//在行编辑器中使用验证器ui->lineEdit3->setValidator(validator);
- 在代码中为lineEdit3添加了验证器,那么它现在只能输入100~999 之间的数字再进入 lineEdit3的回车键按下信号的槽,输出lineEdit3的内容。然后运行程序会发现,其他的字符无法输人,而输入小于100的数字时,按下回车键也是没有效果的QValidator 中还提供了 QDoubleValidator,可以用它来设置浮点数。如果想设置更强大的字符约束,就要使用正则表达式了,这个在第7章会讲到,这里举一个简单的例子
QRegExp rx("- ? \d{ 1.3 }" );
OValidator*validator =new ORegExpValidator(rx,this);
这样就可以实现在开始输入“一”号或者不输入,然后输入1~3个数字的限制。
3.4 自动补全
- QlineEdit中也提供了强大的自动补全功能,这是利用QCompleter 类实现的。在MyWidget类的构造函数中继续添加代码:
StrinqList wordList;
wordList <"Ωt"<"Qt Creator"< tr("你好");
QCompleter*completer=newQCompleter(wordList,this):/新建自动完成器//设置大小写不敏感
completer->setCaseSensitivity(Ot::CaseInsensitive);
ui->lineEdit4->setCompleter(completer):
要添加#include 头文件,运行程序,在最后一个行编辑器中输入"Q",则自动出现 “Qt” 和 “Qt Creator” 两个选项。QCompleter 的使用可以参考 Qt 的示例程序 Completer。
4. QAbstractSpinBox
- QAbstractSpinBox类是一个抽象基类,提供了一个数值设定框和一个行编辑器来显示设定值。它有3个子类QDateTimeEdit、QSpinBox 和 QDoubleSpinBox,分别用来完成日期时间、整数和浮点数的设定。
- 下面实战一下查看SpinBoxes示例程序。新建Qt Widgets应用,项目名称 myspinbox,基类为QWidget,类名 MyWidget。
4.1 QDateTimeEdit
- QDateTimeEdit 类提供了一个可以说编辑日期和时间的部件。到设计模式,从部件栏中分别拖 Time Edit、Date Edit 和 Date/Time Edit 到界面上,然后设置timeEidt 的 displayFormat 为“h:mm:ssA”,这就可以使用 12 h制来显示。对于dataEdit,选中他的calendarPopup属性,就可以使用弹出的日历部件来设置如期。然后在MyWidget 类的构造函数中添加代码:
//设置时间为现在的系统时间ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());//设置时间的显示格式ui->dateTimeEdit->setDisplayFormat(tr("yyyy年MM月dd日dddHH时mm分ss秒"));
- 运行如下,还要说明,可以使用该部件的 text() 函数获取设置的值,它返回QString 类型的字符串,也可以使用dateTime()函数,它返回QDateTime 类型数据。
4.2 QSpinBox 和 QDoubleSpinBox
- QSpinBox 用来设置整数,QDoubleSpinBox 用来设置浮点数,这两个部件在前边的输入对话框中已经接触过了。
- 从部件栏中找到SpinBox和Double Spin Box,并将它们拖入到界面上。可以在属性栏中看到spinBox的属性有:后缀suffix属性,可以设置为“%”,这样就可以显示百分数了;前缀prefix属性,比如表示金钱时前面有“¥”字符;最小值 minimum属性,设置其最小值;最大值maximum属性设置其最大值;单步值 singleStep属性设置每次增加的数值,默认为1;value为现在显示的数值。而 dou-bleSpinBox又增加了一个小数位数 decimals属性,用来设置小数点后面的位数。关于这两个部件就不再过多讲述,最后提醒大家,可以在代码中使用value()函数来获取设置的数值。
5. QAbstractSlider
- QAbstractSlider类用于提供区间内的一个整数值,它有一个滑块,可以定位到一个整数区间的任意值。该类是一个抽象基类,它有3个子类QScrollBar、QSlider 和QDial。其中,滚动条QScrollBar多数是用在QScrollArea类中来实现滚动区域;QSlider就是常见的音量控制或多媒体播放进度等滑块部件;QDial是一个刻度表盘部件这些部件可以参考Sliders示例程序。
- 新建QtWidgets应用,项目名称myslider,基类选择QWidget,类名为MyWidget。完成后到设计模式,从部件栏中分别将 Dial、Horizontal Scroll Bar 和Vertical Scroll Bar、Horizontal Slider 以及Vertical Slider 等部件拖入到界面上,如下:
- 先看两个 Scroll Bar 的属性:maximum属性用来设置最大值,minimum 属性用来设置最小值;singleStep属性是每步的步长,默认是1,就是按下方向键后其数值增加或者减少1;pageStep是每页的步长,默认是10,就是按下PageUp或者PageDown按键后,其数值增加或者减少10;value与sliderPosition是当前值;tracking设置是否跟踪,默认为是,就是在拖动滑块时,每移动一个刻度,都会发射valueChanged()信号,如果选择否,则只有拖动滑块释放时才发射该信号;orientation设置部件的方向,有水平和垂直两种选择;invertedAppearance属性设置滑块所在的位置,比如默认滑块开始在最左端,选中这个属性后,滑块默认就会在最右端。invertedControls设置反向控制,比如默认是向上方向键是增大,向下方向键是减小,如果选中这个属性,那么控制就会正好反过来。另外,为了使部件可以获得焦点,需要将focusPolicy设置为StrongFocus。
- -再来看两个 Slider,它们有了自己的两个属性 tickPosition和tickInterval,前者用来设置显示刻度的位置,默认是不显示刻度;后者是设置刻度的间隔。
- 而Dial有自己的属性wrapping,用来设置是否首尾相连,默认开始与结束是分开的;属性notchTarget 用来设置刻度之间的间隔;属性notchesVisible用来设置是否显示刻度。
- 再往界面上拖人一个Spin Box,然后进人信号和槽编辑界面,将刻度表盘部件 dial的 sliderMoved(int)信号分别与其他各个部件的setValue(int)槽相连接。设置完成后运行程序,然后使用鼠标拖动刻度盘部件的滑块,可以看到其他所有的部件都跟着变化了。
QQ2025418-204420
相关文章:
Qt 入门 5 之其他窗口部件
Qt 入门 5 之其他窗口部件 本文介绍的窗口部件直接或间接继承自 QWidget 类详细介绍其他部件的功能与使用方法 1. QFrame 类 QFrame类是带有边框的部件的基类。它的子类包括最常用的标签部件QLabel另外还有 QLCDNumber、QSplitter,QStackedWidget,QToolBox 和 QAbstractScrol…...
Linux系统之----冯诺依曼结构
1.简要描述 冯诺依曼体系结构是现代计算机的基本设计思想,其核心理念是将计算机的硬件和软件统一为一个整体,通过存储程序的方式实现计算。冯诺依曼体系结构的核心思想是通过存储程序实现自动计算,其五大部件协同工作,奠定了现代…...
C++11新特性
目录 引入 C11新特性 统一的初始化列表 一切皆可{}初始化 std::initializer_list 统一的声明 auto decltype nullptr 范围for STL新增容器 STL新增容器接口 左值引用和右值引用 左值和右值 左值引用和右值引用 右值引用的优势(移动语义) 右值引用的使用场景 …...
492Q 型气缸盖双端面铣削组合铣床总体设计
一、引言 492Q 型气缸盖是发动机的重要组成部分,其双端面的加工精度对发动机的性能和可靠性有着重要影响。设计一款适用于 492Q 型气缸盖双端面铣削的组合铣床,能够提高加工效率和质量,满足发动机生产的需求。 二、总体设计要求 加工精度&…...
《软件设计师》复习笔记(4.2)——关系代数、函数依赖、范式
目录 一、关系代数 基本运算 笛卡尔积() 投影(π) 选择(σ) 自然连接(⋈) 真题示例: 二、函数依赖 基本概念 Armstrong公理系统 键与约束 三、范式ÿ…...
IO流(二)
一、字符流 使用字节流可以读取文件中的字节数据。但是如果文件中有中文使用字节流来读取,就有可能读到半个汉字的情况,这样会导致乱码。虽然使用读取全部字节的方法不会出现乱码,但是如果文件过大又不太合适。 所以Java专门为我们提供了另…...
#Linux动态大小裁剪以及包大小变大排查思路
1 动态库裁剪 库分为动态库和静态库,动态库是在程序运行时才加载,静态库是在编译时就加载到程序中。动态库的大小通常比静态库小,因为动态库只包含了程序需要的函数和数据,而静态库则包含了所有的函数和数据。静态库可以理解为引入…...
天梯赛数据结构合集
1.集合操作:PTA | 程序设计类实验辅助教学平台 主要是注意set的取交集操作,AC代码: #include<bits/stdc.h> using namespace std; int n,m,k; set<int> a[60]; int main(){cin>>n;for(int i1;i<n;i){cin>>m;for…...
pdfjs库使用记录1
import React, { useEffect, useState, useRef } from react; import * as pdfjsLib from pdfjs-dist; // 设置 worker 路径 pdfjsLib.GlobalWorkerOptions.workerSrc /pdf.worker.min.js; const PDFViewer ({ url }) > { const [pdf, setPdf] useState(null); const […...
LIMS引领综合质检中心数字化变革,赋能质量强国战略
在质量强国战略的深入推进下,我国综合质检机构迎来了前所未有的发展机遇,同时也面临着诸多严峻挑战。随着检测领域从传统的食品药品监督向环境监测、新材料检测等新兴领域不断拓展,跨领域协同管理的复杂度呈指数级增长。作为提升产品质量的关…...
MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418
MySQLRedis实战教程:从Docker安装部署到自动化备份与数据恢复 一、前言 在企业应用中,对MySQL和Redis运维的要求越来越高: 不能仅是启动就算部署运行稳定、隔离、访问控制、备份恢复、安全可靠,才是 企业级的基本功能 本文将手…...
嵌入式音视频开发指南:从MPP框架到QT实战全解析
嵌入式音视频开发指南:从MPP框架到QT实战全解析 一、音视频技术全景概述 1.1 技术演进里程碑 2003-2010年:标清时代(H.264/AVC + RTMP)2011-2018年:高清时代(H.265/HEVC + WebRTC)2019-至今:智能时代(AV1 + AI编解码 + 低延迟传输)1.2 现代音视频技术栈 #mermaid-s…...
如何使用Python进行自动化的系统管理?
Python已经成为系统管理员最流行的编程语言之一,因为它简单、灵活,并且广泛支持各种系统管理任务。无论您是自动执行重复性任务,管理文件和目录,还是处理用户权限,Python都提供了一组强大的工具来简化您的工作流程。 …...
拆机装机,通电主板亮灯风扇不转无法开机解决办法
电源开机线 重启线 usb耳机模块 灯线 看来电源没问题 参考https://zhidao.baidu.com/question/83939532/answer/2321171868.html 买了个新主板过几天到看看会不会好...
IntelliSense 已完成初始化,但在尝试加载文档时出错
系列文章目录 文章目录 系列文章目录前言一、原因二、使用步骤 前言 IntelliSense 已完成初始化,但在尝试加载文档时出错 File path: E:\QtExercise\DigitalPlatform\DigitalPlatform\main\propertyWin.ui Frame GUID:96fe523d-6182-49f5-8992-3bea5f7e6ff6 Frame …...
SuperMap iClient3D for WebGL 如何加载WMTS服务
在 SuperMap iClient3D for WebGL 中加载WMTS服务时,参数配置很关键!下面我们详细介绍如何正确填写参数,确保影像服务完美加载。 一、数据制作 对于上述视频中的地图制作,此处不做讲述,如有需要可访问:Onl…...
[密码学实战]基于Python的国密算法与通用密码学工具箱
引言 在当今数字化浪潮中,信息安全已成为个人隐私保护与商业机密守护的核心议题。作为一位在密码学领域深耕多年的技术实践者,我深谙密码学工具在构建数字安全防线中的关键作用。正是基于这份认知与责任,我倾力打造了一款全方位、高性能的密…...
[密码学实战]详解gmssl库与第三方工具兼容性问题及解决方案
[密码学实战]详解gmssl库与第三方工具兼容性问题及解决方案 引言 国密算法(SM2/SM3/SM4)在金融、政务等领域广泛应用,但开发者在集成gmssl库实现SM2签名时,常遇到与第三方工具(如OpenSSL、国密网关)验证不…...
LIB-ZC, 一个跨平台(Linux)平台通用C/C++扩展库, stream 流操作
LIB-ZC, 一个跨平台(Linux)平台通用C/C扩展库, stream 流操作 lib-zc 封装了流操作命名空间 zcc基础类 stream(基类), iostream(io流封装) class stream 介绍 连接相关 // 都是虚函数, 为 iostream 等做准备virtual inline bool connect(const char *destination) { return …...
从零开始解剖Spring Boot启动流程:一个Java小白的奇幻冒险之旅
大家好呀!今天我们要一起探索一个神奇的话题——Spring Boot的启动流程。我知道很多小伙伴一听到"启动流程"四个字就开始头疼,别担心!我会用最通俗易懂的方式,带你从main()方法开始,一步步揭开Spring Boot的…...
概率多假设跟踪(PMHT):多目标跟踪中的概率软关联与高效跟踪算法解析
一、PMHT 的起源与核心定位 (一)背景 在多目标跟踪中,传统算法面临以下瓶颈: JPDA:单帧局部最优关联,无法处理跨帧长时间断联,且假设目标数固定(如雷达跟踪中预设目标数范围&…...
4.信号和槽|存在意义|信号和槽的连接方式|信号和槽断开|lambda表达式|信号和槽优缺点(C++)
信号和槽存在意义 所谓的信号槽,终究要解决的问题,就是响应用户的操作 信号槽,其实在GUI开发的各种框架中,是一个比较有特色的存在 其他的GUI开发框架,搞的方式都要更简洁一些~~ 网页开发 (js dom api) 网…...
电脑 BIOS 操作指南(Computer BIOS Operation Guide)
电脑 BIOS 操作指南 电脑的BIOS界面(应为“BIOS”)是一个固件界面,允许用户配置电脑的硬件设置。 进入BIOS后,你可以进行多种设置,具体包括: 1.启动配置 启动顺序:设置从哪个设备启动&#x…...
Scrapeless Scraping Browser: A high-concurrency automation solution for AI
介绍:升级无缝抓取浏览器的并发能力 作为 Scrapeless 的开发者和创始团队,我们对人工智能自动化的未来充满真诚的热情。我们的使命是创建一个真正为 AI 设计的自动化浏览器。在过去的几年中,从 Browserless.io 到众多云服务供应商推出的“浏…...
Java项目—— 拼图小游戏(进阶版)
项目需求 在拼图小游戏基础版的基础上,完成下列要求: 一、实现更换拼图图片功能 1,给美女,动物,运动菜单按钮添加单击事件(动作监听) 2,当我们点击了美女之后,就会从13…...
解析:深度优先搜索、广度优先搜索和回溯搜索
一、深度优先搜索(DFS) 1. 原理 思想:从起始节点出发,顺着一条路径不断深入,直到到达目标或无路可走,然后回溯到最近的分支点,继续探索其他分支。 应用场景:路径查找、连通性检测、…...
探索大语言模型(LLM):循环神经网络的深度解析与实战(RNN、LSTM 与 GRU)
一、循环神经网络(RNN) 1.1 基本原理 循环神经网络之所以得名,是因为它在处理序列数据时,隐藏层的节点之间存在循环连接。这意味着网络能够记住之前时间步的信息,并利用这些信息来处理当前的输入。 想象一下…...
从零开始开发 MCP Server
作者:张星宇 在大型语言模型(LLM)生态快速演进的今天,Model Context Protocol(MCP)作为连接 AI 能力与真实世界的标准化协议,正逐步成为智能体开发的事实标准。该协议通过定义 Resources&#…...
Oracle日志系统之重做日志和归档日志
Oracle日志系统之重做日志和归档日志 重做日志归档日志 本文讨论Oracle日志系统中对数据恢复非常重要的两个日志:重做日志和归档日志。 重做日志 重做日志,英文名Redo Log,顾名思义,是用来数据重做的,主要使用场景是事…...
嵌入式开发--STM32G4系列硬件CRC支持MODBUS和CRC32
需求 在项目中,需要用到MODBUS CRC16校验,也要用到CRC32的校验,出于效率的考虑,准备用硬件CRC。 CRC 16的参数模型有很多种,我这里用的是MODBUS,对于不同的参数模型,会有不同的参数设置和初值&a…...
基于尚硅谷FreeRTOS视频笔记——4—多任务处理
目录 多任务处理 任务调度 任务的调度策略 优先级不同 优先级相同 多任务处理 通俗来讲就是 能够在同一时间 同时 进行多个任务的处理,这就时多任务处理。 但是,单核处理器一次只能处理一个任务,就是说在while中,任务们只能…...
中小型及初创企业如何实现数字化转型?
在当今动态的商业环境中,财务团队开始肩负起推动企业数字化转型的重任,即从传统的财务规划系统稳步迈向基于商业智能平台和以创新技术为驱动的解决方案领域。这些举措有望提高运营和分析效率,同时依托数据驱动的决策机制,帮助企业…...
java输出、输入语句
先创建一个用于测试的java 编写程序 #java.util使java标准库的一个包,这里拉取Scanner类 import java.util.Scanner;public class VariableTest {public static void main(String[] args) {#创建一个 Scanner 对象Scanner scanner new Scanner(System.in);System.…...
Python基础知识语法归纳总结(数据类型-1)
Python基础知识&语法归纳总结(数据类型) 一、Python基本数据类型 尤其注意,Python中的变量不需要特定的去声明,每个变量在使用前都必须对其进行赋值,它没有类型,我们所说的“类型”是变量所指的内存中对…...
Spring数据访问全解析:ORM整合与JDBC高效实践
目录 一、Spring ORM集成深度剖析 🌟 ORM模块架构设计 核心集成特性: 整合MyBatis示例配置: 二、Spring JDBC高效实践指南 🌟 传统JDBC vs Spring JDBC对比 🌟 JdbcTemplate核心操作示例 批量操作优化…...
哪种电脑更稳定?Mac?Windows?还是云电脑? 实测解密
随着科技的发展进步,电脑已成为当下各类群体的必备产品之一,它的妙用有很多,无论是学生党、打工人还是已经退休的人群或都离不开它的存在。然而,电脑虽好却也差异很大、不同品牌、不同系统、不同配置、不同价位的统统都会有区别。…...
【AI模型学习】关于写论文——论文的审美
文章目录 一、“补丁法”(Patching)1.1 介绍1.2 方法论1.3 实例 二、判断工作的价值2.1 介绍2.2 详细思路2.3 科研性vs工程性 三、novelty以及误区3.1 介绍3.2 举例 看了李沐老师的读论文系列后,总结三个老师提到的有关课题研究和论文写作的三…...
【面经】杭州产链数字科技一面
1.介绍一下自己 面试官您好!我叫***,目前是就读于****计算机科学与技术专业的一名学生。我平时在学校也自学了编程相关的知识,比如Java基础、Springboot、SpringCloud,关系型数据库Mysql,非关系型数据库Redisÿ…...
微信小程序调用yolo目标检测模型
目录 后端 前端微信小程序 完整代码 后端 利用Flask,调用目标检测模型,后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…...
vmware17 虚拟机 ubuntu22.04 桥接模式,虚拟机无法接收组播消息
问题描述: 在一个项目中,宿主机win10中,使用的vmware17pro 虚拟机安装的ubuntu22.04,按照网上的教程使用Qt绑定组播消息,在另外一个Ubuntu工控机上发送用wiresahrk抓包的组播消息 sudo tcpreplay -i enp1s0 --loop0 y…...
Kaggle-Bag of Words Meets Bags of Popcorn-(二分类+NLP+Bert模型)
Bag of Words Meets Bags of Popcorn 题意: 有很多条电影评论记录,问你每一条记录是积极性的评论还是消极性的评论。 数据处理: 1.首先这是文件是zip形式,要先解压,注意sep ‘\t’。 2.加载预训练的 BERT 分词器 …...
数字信号处理技术架构与功能演进
数字信号处理(DSP)是通过数字运算实现信号分析、变换、滤波及调制解调的技术领域,其发展过程与技术应用如下: 一、定义与核心功能 技术定义:通过算法将模拟信号转换为数字形式进行处理,具有高精度、可编程…...
IaaS架构剖析、场景实践
一、什么是 IaaS 1.1 定义 Infrastructure as a Service(IaaS,基础设施即服务)是一种按需、弹性提供计算、存储、网络和安全等底层 IT 资源的云服务模式。用户通过 API、CLI 或 Web 控制台即可在几分钟内创建、扩容或释放资源,而…...
国产之光DeepSeek架构理解与应用分析02
本专栏 国产之光DeepSeek架构理解与应用分析-CSDN博客 国产之光DeepSeek架构理解与应用分析02-CSDN博客 前置的一些内容理解 GPU TPU NPU的区别? 设计目的 GPU:最初是为了加速图形渲染而设计的,用于处理图像和视频数据,以提供高…...
EDID结构
EDID DDC通讯中传输显示设备数据 VGA , DVI 的EDID由128字节组成,hdmi的EDID增加扩展块128字节。扩展快的内容主要是和音频属性相关的,DVI和vga没有音频,hdmi自带音频,扩展快数据规范按照cea-861x标准。 Edid为了让pc或其他的图像…...
4.黑马学习笔记-SpringMVC(P43-P47)
1.SpringMVC简介 SpringMVC技术(更少的代码,简便)与servlet技术功能相同,属于web层开发技术。 SpringMVC是一种基于java实现MVC模型的轻量级web框架。 轻量级指的是(内存占用比较低,运行效率高)…...
CSS 文件格式
A QFrame#andrFrm[status"android_en"] A:表示父类或顶层窗口的类型。如果 A 是一个自定义的类名,确保该类已经正确注册到 Qt 系统中。QFrame:表示具体的控件类型。#andrFrm:表示控件的对象名称(通过 setOb…...
java输出HelloWorld
创建一个java格式文件,这里命令为HelloWorld 这里我选择用notepad编译,也可以直接用记事本 #public 访问修饰词,表示这个类可以被其他任何类访问 #class 定义类的关键字 #HelloWorld 类名,遵循驼峰命名法(首字母大写…...
【SAP ME 44】在 HANA DB中报废SFC时的SHOP_ORDER表记录锁定
症状 SELECT…FROM SHOP_ORDER FOR UPDATE 在 SFC 报废期间持有锁,当同时调用数量较大时,可能会导致 HANA 数据库出现大量锁积压。这有时会导致因等待 HANA 数据库释放“选择更新”锁而导致报废 SFC 花费数分钟。 HANA 数据库日志中的示例: # begin PreparedStatement_ex…...
《软件设计师》复习笔记(12.1)——范围管理、进度管理
目录 一、范围管理 1. 核心概念 2. 范围管理过程 WBS(工作分解结构)示例 真题示例: 二、进度管理 1. 核心过程 2. 关键工具与技术 真题示例: 一、范围管理 1. 核心概念 项目范围:为交付产品必须完成的工作…...