Qt QMake指南(如何写pro文件)

QMake相关介绍

QMake是一个通过编译Pro文件自动生成Makefile文件的工具。

扩展知识

这里是关于make、makefile、cmake、CMakeLists.txt、qmake等工具和文件之间关系的详细解释:

  1. 起始:当我们开始学习基础的helloworld项目时,一般使用gcc命令进行编译。gcc代表GNU Compiler Collection(GNU编译器套件),它是一种编译器。
  2. 项目增大时的需求:随着项目变得复杂,涉及多个需要编译的文件时,使用gcc命令逐个编译变得不切实际。这时候,就需要使用makefile文件和make工具。
  3. makefile:makefile是一个定义项目编译和链接规则的文件,它指定了哪些文件需要编译,哪些不需要,以及编译的先后顺序等。文件的编译过程仍然依赖于调用gcc或其他编译器。
  4. make工具:make工具的功能是读取makefile中定义的规则来编译和链接项目。
  5. CMake的引入:由于makefile可以变得非常复杂,尤其是在大型或跨平台项目中,CMake工具被用来生成makefile。CMake支持跨平台编译,不仅限于生成makefile,还能生成适用于不同平台和开发环境的构建文件。
  6. CMakeLists.txt:CMakeLists.txt是CMake使用的配置文件,包含了项目文件路径、环境设置和编译配置等。尽管某些IDE可以帮助生成基本的CMakeLists.txt框架,但这个文件通常需要开发者根据项目的具体需求手动编写和调整。
  7. qmake:qmake是一个类似于CMake的工具,主要用于Qt框架的项目。它专门处理Qt特定的构建需求,比如MOC(元对象编译器)和UIC(用户界面编译器)。qmake通过解析Qt项目的.pro文件来生成makefile。
  8. pro文件:qmake工具通过读取.pro文件——这是一个包含了项目相关配置和规则的文件——来生成makefile。.pro文件的语法和结构设计用来支持Qt项目的特定需求。

内置变量

qmake的基本行为受到变量声明的影响,这些声明定义了每个项目的构建过程。其中一些声明资源,例如HEADERS和SOURCES是每个平台所共有的。其他的则是用来定制特定平台上的编译器和链接器的行为。

Qt模块

QT变量主要包含项目所需的Qt模块,Qt基础模块有以下:

基础模块描述
core(默认包含该模块)核心模块
gui(默认包含该模块)图形用户界面模块
multimedia音频、视频、广播和相机功能模块
multimedia widgets用于实现多媒体功能的widget模块
network网络编程模块
qml支持QML和JavaScript语言的模块
quick构建具有自定义用户动态界面的应用程序模块
quick controls提供轻量级QML控件类型的模块
quick dialogs为quick应用程序提供对话框的模块
quick layouts基于Qt Quick 2项目的用户界面布局模块
quick testQML单元测试模块
sql数据库模块
testQt应用程序和库的单元测试模块
widgets扩展GUI窗口类的模块

默认Qt项目将包含core和gui两个模块,如果项目不需要界面显示,则需要添加以下代码:

QT -= gui

Qt还扩展了很多附加模块:

附加模块开发平台应用平台描述
Active QtWindowsWindows支持ActiveX和COM模块
Qt 3DAllAll实时仿真系统,支持2D和3D渲染
Qt Android ExtrasAllAndroid为Android提供特定于平台的API
Qt BluetoothAllAndroid,ios,Linux,MacOS,UWP提供对蓝牙的访问
Qt ConcurrentAllAll在不使用低级线程语法下编写多线程程序
Qt D-BusAllAll通过D-Bus协议进行进程间通信
Qt GamepadAllAndroid,ios,macOS,tvOS,Linux,Windows,QNX支持游戏手柄硬件的应用程序
Qt Graphical EffectsAllAll用于Qt Quick 2的图形效果
Qt HelpAllAll像Qt助手一样将文档集成到应用程序中
Qt Image FormatsAllAll支持其他图形格式:TIFF、MNG、TGA、WBMP
Qt LocationAllAll在QML应用程序中显示地图、导航和地点内容
Qt Mac ExtrasAllmacOS为macOS提供特定于平台的API
Qt NFCAllAndroid,Linux支持NFC硬件访问
Qt PositioningAllAndroid,ios,macOS,Linux,UWP提供对位置、卫星和区域监控类的访问
Qt Print SupportAllAll提供更便捷的打印类
Qt Quick ExtrasAllAll提供一组专门的Quick控件
Qt Quick TimelineAllAll启用基于关键帧的动画和参数化
Qt Quick WidgetsAllAll提供用于显示Quick用户界面的小部件类
Qt Remote ObjectsAllAll提供一种用于在进程或设备之间共享QObject的API
Qt SCXMLAllAll提供从SCXML文件中创建状态机并将其嵌入到应用程序中
Qt Serial PortAllWindows,Linux,macOS,QNX提供对硬件和虚拟串口的访问
Qt SpeechAllAll except QNX提供对语音方面的支持
Qt SVGAllAll用于显示SVG文件内容的类
Qt UI ToolsAllAll运行时动态加载基于QWidget的表单类
Qt WebChannelAllAll提供从HTML客户端对QObject或QML对象的访问,用来实现应用程序和HTML/JavaScript客户端的联系
Qt WebEngineAllWindows,Linux,macOS将Chromium浏览器引擎嵌入应用程序中
Qt WebSocketsAllAll提供符合RFC6455的Websocket通信
Qt WebViewAllAll支持原生API显示Web浏览器视图
Qt Windows ExtrasAllWindows为Windows提供特定于平台的API
以下在商业许可证或GNU通用公共许可证V3下可以用的附加模块:
Qt ChartsAllAll图表模块
Qt Data VisualizationAllAll3D数据可视化组件
Qt Lottie AnimationAllAll以JSON格式渲染图形和动画的QML API
Qt Virtual KeyboardAllLinux,Windows desktop,Boot to Qt targets支持本地的虚拟键盘
Qt Quick 3DAllAll提供Quick 3D相关API
Qt Quick WebGLAllWebGL-enabled web browsers支持WebGL插件

HEADERS

项目包含头文件列表:

HEADERS += widget.h

SOURCES

项目包含源文件列表:

SOURCES += main.cpp \widget.cpp

FORMS

项目包含UI文件列表:

FORMS += widget.ui

RESOURCES

指定目标的资源文件(qrc)的名称。

RESOURCES += src.qrc

INCLUDEPATH

指定编译项目时要包含当前目录。例如:

INCLUDEPATH = c:/msdev/include d:/stl/include

LIBS

该变量包含链接到工程的库列表。可以使用Unix平台-L(库路径)和-l(库名称)的标识,qmake会正确处理Windows和symbian平台上的这些库。例如:

LIBS += -L./lib -ltest   # 链接到./bin目录下的test.lib
LIBS += -ltest           # 链接到当前目录下的test.lib

CONFIG

通用配置,主要包含编译器选项和属性以及链接库标志。

选项描述
release该项目以发布模式构建。如果同时定义了debug,则将忽略release
debug该项目以调试模式构建。
debug_and_release该项目以调试和发布模式构建。
debug_and_release_target该项目使用debug和release两种模式构建,目标会被构建到debug和release两个目录下
build_all如果指定了debug_and_release,项目默认以调试和发布模式构建。
autogen_precompile_source自动生成一个.cpp文件,包含.pro文件中指定的预编译头文件。
ordered当使用subdirs模板时,该选项指定按照列出的目录顺序构建。
precompile_header项目支持预编译头文件
precompile_header_c项目支持对C的预编译头文件
warn_on编译器警告信息输出打开
warn_off编译器警告信息输出关闭
exceptions默认启用异常
exceptions_off关闭异常
ltcg启用链接时间代码生成,默认是关闭的
rtti启用对RTTI的支持,默认情况下使用编译器的默认值
rtti_off关闭对RTTI的支持,默认情况下使用编译器的默认值
stl启用对STL的支持,默认情况下使用编译器的默认值
stl_off关闭对STL的支持,默认情况下使用编译器的默认值
thread启用对线程的支持,当CONFIG包含了qt模块时,这将被启用,这是默认的。
c99启用对C99的支持。如果编译器不支持C99,或者不能选择C标准,这个选项就没有作用。默认情况下使用编译器的默认值
c11启用对C11的支持。如果编译器不支持C11,或者不能选择C标准,这个选项就没有作用。默认情况下使用编译器的默认值
strict_c禁用对C编译器扩展的支持。默认情况下被启用。
c++11启用对C11标准的支持。如果编译器不支持C11,或者不能选择C++标准,这个选项就没有作用。默认情况下是启用的。
c++14启用对C14标准的支持。如果编译器不支持C14,或者不能选择C++标准,这个选项就没有作用。默认情况下使用编译器的默认值。
c1z / c17启用对C17标准的支持。如果编译器不支持C17,或者不能选择C++标准,这个选项就没有作用。默认情况下是禁用的。
c++2a启用对C2a标准的支持。如果编译器不支持C2a,或者不能选择C++标准,这个选项就没有作用。默认情况下是禁用的。
c++latest启用编译器所支持的最新C++标准的支持,默认情况下是禁用的。
strict_c++禁用对C++编译器扩展的支持。默认情况下是被启用的。
depend_includepath启用将INCLUDEPATH的值追加到DEPENDPATH。默认启用
lrelease对 TRANSLATIONS 和 EXTRA_TRANSLATIONS 中列出的所有文件运行 lrelease。如果 embed_translations 没有被设置,请将生成的 .qm 文件安装到 QM_FILES_INSTALL_PATH。使用 QMAKE_LRELEASE_FLAGS 来为 lrelease 调用添加选项。默认情况下不设置。
embed_translations在QM_FILES_RESOURCE_PREFIX下的可执行文件中嵌入从lrelease生成的翻译。需要lrelease也被设置。默认情况下不设置。
create_libtool为当前构建的库创建一个libtool.la文件
create_pc为当前构建的库创建一个pkg-config .pc 文件。
no_batch仅限NMake。关闭NMake批处理规则或推理规则的生成。
skip_target_version_ext在Windows下,禁止自动附加在DLL文件名上的版本号。
suppress_vcproj_warnings禁止VS项目生成警告信息。
windeployqt在链接后自动调用windeployqt,并将输出添加为部署项。
dont_recurse禁止qmake递归当前子项目
no_include_pwd不要将当前目录添加到INCLUDEPATHS中
compile_include_sources默认情况下,qmake不编译包含在其他源文件中的源文件

当您使用该debug_and_release选项(Windows 下的默认设置)时,项目将被处理三次:一次生成“元”Makefile,另外两次生成 Makefile.Debug 和 Makefile.Release。
在后者构建时,debugorrelease选项被附加到CONFIG. 这使得执行特定于构建的任务成为可能。

以下选项定义应用程序或库的类型:

选项描述
qt默认定义。该项目依赖Qt库
x11该项目是一个X11应用程序或库
testcase该项目是自动化测试。检查并添加到生成的Makefile中以运行测试
insignificant_test自动测试的退出代码将被忽略。
windows该项目是一个win32窗口应用程序
console该项目是一个win32控制台应用
shared该项目是一个共享项目
dll该项目是一个动态库项目,构建后自动生成dll文件
dylib该项目是一个Mac OS的动态库项目,构建后自动生成dylib文件
static该项目是一个静态库项目
staticlib该项目是一个静态库项目
plugin该项目是一个插件项目
designer该项目是一个Qt designer插件项目
uic3
no_Iflags_merge配置该项使LIBS的库列表不会被简化为唯一名称的列表
resources配置rcc资源模块

DESTDIR

指定目标(可执行文件)放置的路径

SUBDIRS

该变量和subdirs模板类型一起使用时,指定项目需要构建的所有子项目(子目录)名称。包含的子目录必须包含自己的pro文件。例如:

SUBDIRS = kernel \tools \myapp

注意:当CONFIG 配置添加了 ordered,则SUBDIRS包含子目录的顺序决定了构建的顺序。

TARGET

指定目标文件的名称。默认包含项目文件的基本名称。例如:

TARGET = myapp

TEMPLATE

指定生成项目时要使用的模板名称。模板选项包含以下:

选项描述
app(默认)。构建为应用程序
lib构建为库
subdirs构建子目录
aux不构建任何东西
vcapp构建为Windows系统下的VS应用程序项目
vclib构建为Windows系统下的库项目

DEPENDPATH

指定qmake要扫描的目录列表,用来解决项目中的依赖关系。该变量在qmake抓取你的源代码中#include的头文件时使用。

DEFINES

qmake将该变量的值作为C编译器的预处理宏。

VERSION

如果模板类型为app,则表示应用程序的版本号;如果模板类型为lib,则表示库的版本号。

win32:VERSION = 1.2.3.4 # major.minor.patch.build
else:VERSION = 1.2.3    # major.minor.patch

DLLDESTDIR

指定复制目标dll的目录。注意:该变量只适用于Windows平台。

RCC_DIR

指定Qt资源编译器输出文件的目录。例如:

unix:RCC_DIR = ../myproject/resources
win32:RCC_DIR = c:/myproject/resources

PRO_FILE

pro文件的绝对路径,包含pro文件名称,例如:

message(_PRO_FILE_)
# out:
# Project MESSAGE: E:/Test/ProTest/ProTest.pro

PRO_FILE_PWD

pro文件的目录路径,不包含pro文件名称,例如:

message(_PRO_FILE_PWD_)
# out:
# Project MESSAGE: E:/Test/ProTest

函数

CONFIG(config)

这个函数是用来测试放在CONFIG变量中的变量的,功能类似于条件作用域。函数的第二个参数是用来指定互斥条件的,例如:

# test1:CONFIG += debugCONFIG(debug) : message(debug build!)CONFIG(release) : message(release build!)# out: 因为没有指定互斥量,所以两种输出都将执行# Project MESSAGE: debug build!# Project MESSAGE: release build!# Project MESSAGE: debug build!# Project MESSAGE: release build!# Project MESSAGE: debug build!# Project MESSAGE: release build!# test2:CONFIG += debugCONFIG(debug, debug|release) : message(debug build!)CONFIG(release, debug|release) : message(release build!)# out: 当前指定debug模式,所以只会输出debug build!# Project MESSAGE: debug build!# Project MESSAGE: debug build!# Project MESSAGE: debug build!# test3:CONFIG += releaseCONFIG(debug, debug|release) : message(debug build!)CONFIG(release, debug|release) : message(release build!)# out:当前指定release模式,所以只会输出release build!# Project MESSAGE: release build!# Project MESSAGE: release build!# Project MESSAGE: release build!# test4:CONFIG(debug, debug|release) : message(debug build!)CONFIG(release, debug|release) : message(release build!)# release构建 out:# Project MESSAGE: release build!# Project MESSAGE: release build!# Project MESSAGE: debug build!# debug构建 out:# Project MESSAGE: debug build!# Project MESSAGE: debug build!# Project MESSAGE: release build!

注意上面测试示例输出的内容为什么会有三次呢?因为在缺省情况下,qmake将创建三个makefile文件,分别为Makefile,Makefile.debug以及Makefile.release三个。所以当测试示例4中没有指定固定的构建配置,IDE选择release模式时Makefile和Makefile.release两个文件对应输出release build!,而Makefile.debug会输出debug build!

contains(variablename, value)

如果变量variablename包含value值,则成功,否则失败。

# 如果QT添加了network模块,则把对应的头文件和源文件添加到项目中
contains( QT, network ) {message( "Configuring for network build..." )HEADERS += network.hSOURCES += network.cpp
}

上面示例代码是contains的主要应用场景,通过判断是否添加某些模块来自动添加对应模块的代码文件。

count(variablename,number)

如果variablename比哪里中包含指定数量number的值列表则成功,反之失败。
该函数主要用于确保作用域内的声明仅在变量包含正确数值的情况下才会被处理。例如:

options = $$find(CONFIG, "debug") $$find(CONFIG, "release")
count(options, 2) { message(Both release and debug specified.)}

include(filename)

意义和C++中的include是一样的,将指定的文件名包含到当前项目中,返回true表示包含成功,反之包含失败。你可以通过使用这个函数作为条件来检查是否被包含。示例如下:

!include(test.pri) {message("test.pri加载失败")
}

一般我们用于包含pri文件。

if(condition)

条件判断,和C++的if语句一样。

for(iterate, list)

循环变量list中的所有值。示例如下:

LIST = 1 2 3
for(a, LIST):message(I see a file.$${a}!)
# out:
# Project MESSAGE: I see a file.1!
# Project MESSAGE: I see a file.2!
# Project MESSAGE: I see a file.3!

message(string)

将字符串以一般信息输出给用户。

message( "This is a message" )  # 引号是可选的,建议使用

注意:默认情况下,qmake为特定项目生成的每个makefile都会输出信息。如果你想确保每个项目只输出一次信息,请参考下面的示例:

!build_pass:message( "This is a message" )

mkpath(dirPath)

创建目录路径dirPath,这个函数是QDir::mkpath函数的一个封装器。
该函数在Qt5.0中被引入。

system(command)

执行shell命令。执行命令返回0表示成功,否则失败。示例如下:

system("ls /bin"): HAS_BIN = TRUE

unset(variablename)

将变量名从当前上下文中移除。

NARF = zort
unset(NARF)
!defined(NARF, var) {message("NARF is not defined.")
}
# out:
# Project MESSAGE: NARF is not defined.

versionAtLeast(variablename, versionNumber)

比较variablename的版本好是否大于等于versionNumber。一般用于判断当前Qt的版本,示例如下:

versionAtLeast(QT_VERSION, 5.12.0):message("Qt 5.12.0")
# out:
# Project MESSAGE: Qt 5.12.0

versionAtMost(variablename, versionNumber)

比较variablename的版本好是否小于等于versionNumber。一般用于判断当前Qt的版本,示例如下:

versionAtMost(QT_VERSION, 5.15.2):message("Qt 5.15.2")
# out
# Project MESSAGE: Qt 5.15.2

warning(string)

以警告的形式输出字符串。同时会在IDE的问题栏中输出信息。

error(string)

以错误的形式输出字符串。同时会在IDE的问题栏中输出信息。

eval(string)

使用qmake语法规则评估字符串的内容并返回true。定义新的变量或修改现有变量的值。示例如下:

# TARGETS 变量没有定义时
eval(TARGETS = myapp) {message($$TARGETS)
}
# out:
# Project MESSAGE: myapp# TARGET 变量已定义时
message($$TARGET)
eval(TARGET = myapp) {message($$TARGET)
}
# out: ProTest是当前测试项目的名称
# Project MESSAGE: ProTest
# Project MESSAGE: myapp

exists(filename)

判断文件名的文件是否存在。如果存在则返回成功,否则返回失败。

isEmpty(variablename)

如果variablename变量为空则返回true,反之返回false。等价于count(variablename,0)。例如:

isEmpty(CONFIG) {
CONFIG += qt warn_on debug}

basename(variablename)

返回指定文件的base文件名称。例如:

FILE = /etc/passwd
FILENAME = $$basename(FILE)
# out:
# passwd

dirname(file)

返回指定文件的目录部分。例如:

FILE = /etc/X11R6/XF86Config
DIRNAME = $$dirname(FILE)
# out:
# /etc/X11R6

find(variablename, substr)

在variablename变量的所有值中查找匹配substr字符串的值,substr可能是正则表达式。例如:

MY_VAR = one two three four
MY_VAR2 = $$find(MY_VAR, t.*)
message($$MY_VAR2)
# out:
# two three

join(variablename,glue,before,after)

使用glue连接variablename变量中的值。如果变量的值非空,在值前面加一个前缀before,在值的后面加一个后缀after。Variablename是必须参数,其它参数默认是空字符串。如果需要在glue、before、after中对空格进行编码,必须对它们使用引号。例如:

MY_VAR = one two three four
MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive
MY_VAR3 = $$join(MY_VAR, " -L", -L, -M)message($$MY_VAR2) #out: -Lone -Ltwo -Lthree -Lfour -Lfive
message($$MY_VAR3) #out: -Lone -Ltwo -Lthree -Lfour-M

member(variablename,position)

返回variablename变量的值列表中位置为position的值。如果找不到对应位置,则返回空字符串。如果不指定position参数,则默认为0,返回值列表中的第一个值。

可以理解variablename为一个数组,而position为数组的下标。例如:

MY_VAR = one two three four
MY_VAR2 = $$member(MY_VAR, 3)
MY_VAR3 = $$member(MY_VAR, 2)message($$MY_VAR2) #out: four
message($$MY_VAR3) #out: three

replace(string, old_string, new_string)

在string字符串中找到old_string字符串,然后用new_string进行替换。例如:

MESSAGE = This is a tent.
message($$replace(MESSAGE, tent, test))
# out:
# This is a test.

unique(variablename)

返回variablename变量的所有值,如果有重复的则删除。例如:

ARGS = 1 2 3 2 5 1
ARGS = $$unique(ARGS) #out: 1 2 3 5

其他

  • 自定义变量以及变量内容的访问
CUSTOMVAL = ./bin     # 自定义变量名为CUSTOMVAL
message($$CUSTOMVAL)  # 输出CUSTOMVAL变量值
# out:
# Project MESSAGE: ./bin
  • 值列表(每个值之间用空格分割)
LIST = 1 2 3
for(a, LIST):message(I see a file.$${a}!)
# out:
# Project MESSAGE: I see a file.1!
# Project MESSAGE: I see a file.2!
# Project MESSAGE: I see a file.3!
  • 单值(单值且中间包含空格时需要用双引号来包含)
LIST = "1 2 3"
for(a, LIST):message(I see a file.$${a}!)
# out:
# Project MESSAGE: I see a file.1 2 3!
  • 注释
# 注释是以'#'符合作为注释的开头,以行末尾作为结束

如果要在变量中使用’#'字符,必须使用内置变量LITERAL_HASH,示例如下:

urlPieces = http://doc.qt.io/qt-5/qtextdocument.html pageCount
message($$join(urlPieces, $$LITERAL_HASH))
# out:
# Project MESSAGE: http://doc.qt.io/qt-5/qtextdocument.html#pageCount# 注意,想要在变量中使用'#'字符,只有这一种方式,用双引号来包含也是没有用的

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

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

相关文章

微信营销在使用时应该注意什么?

(一)注重个人品牌的打造 微信好友的信任是开展个人微信营销成功的基础,因此,平时应利用朋友圈和微信群发布一些有助于提升个人形象的信息。 (二)发送营销信息不可过滥 如果一个人的朋友圈内容充斥营销信息&…

叁[3],VM二次开发异常处理

1,开发环境 VS2022/WPF/.NetFramework4.8 VM4.2 2,"模块状态0,错误码10100005,错误信息:模块与平台不匹配" 现象描述: 1,WPF/NetFramework项目中打开方案,对工具做模板&#xff0c…

开源可视化表单可以用在哪些行业中?

很多客户朋友会询问我们,什么样的行业可以使用低代码技术平台及开源可视化表单?其实,随着社会的进步和发展,很多中小型企业都希望通过低代码技术平台能够让企业实现提质增效的目的,也想借助它的优势特点进入流程化办公…

MySql通过 Procedure 循环删除数据

一、问题描述 在日常使用运维中,一些特殊情况需要批量删除陈旧或异常数据。 如果通过 delete from 【表名】 where 【条件】 直接删除,可能会由于数据量过大,事务执行时间过长,造成死锁。 二、解决方案 通过 Procedure 使用循环…

怎么提升机器人外呼的转化效率

在某些情况下,如市场调查、产品推广等,语音机器人可以高效地完成大量的呼叫任务,并能通过预设的语音脚本和智能识别功能,初步筛选和分类潜在客户。此时,不转人工可能更为高效和经济。 然而,在一些需要深度沟…

jenkins使用注意问题

1.在编写流水线时并不知道当前处在哪个目录,导致名使用不当,以及文件位置不清楚 流水线任务默认路径是,test4_mvn为jenkins任务名 [Pipeline] sh (hide)pwd /var/jenkins_home/workspace/test4_mvn maven任务也是,看来是一样的…

前端相关面试题--html

html是什么 html是超文本标记语言,与js和css一样,是由W3C(万维网联盟)制定的一套语言,超文本 指的是连接一个网站内或多个网站的网页的链接 标记是 html使用各种标记 来注明文本、图片、链接等 以便在浏览器这种进行 …

自动驾驶基础一车辆模型

模型概述: 自行车动力学模型通常用于研究自行车在骑行过程中的行为,如稳定性、操控性和速度等。模型可以基于不同的简化假设和复杂度,从简单的二维模型到复杂的三维模型,甚至包括骑行者的动态。力学方程: 基础物理学方…

【数据结构与算法】广度优先遍历

前序/中序/后序遍历属于 深度优先遍历 广度优先遍历实现 节点定义 /*** Definition for a binary tree node.* function TreeNode(val) {* this.val val;* this.left this.right null;* }*/对应lc 102题 注意js里面 push pop unshift shift之间的区别和关系 // 递…

【SpringBoot整合系列】SpringBoot整合kinfe4j

目录 kinfe4j与Swagger的区别 SpringBoot2.x整合kinfe4j1.添加依赖2.启动类注解3.创建Knife4J配置类4.实体类5.接口admin访问 api访问 常用注解汇总SpringBoot3.x整合Kinfe4j启动报错解决1.更换依赖2.启动类3.配置4.配置类5.参数实体类6.接口admin访问 api访问 各版本注解参照 …

树莓派4B学习笔记8:开机自启动Python脚本_kill关闭后台脚本

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 紧接着上篇文章学习的串口通信,今日学习如何让树莓派开机…

【方法】如何解除PDF“打开密码”?

很多人会给PDF文件设置密码保护,防止文件被随意打开。那如果后续想要解除“打开密码”,如何操作呢? 首先,我们要分两种情况来看,一种是知道密码的情况下,不需要保护文件了,也就是不想每次打开P…

若依Ruoyi-vue和element admin的区别,该如何选择。

提到中后台的前端框架,每个人都能列举出很多,这其中提及率比较高的就是Ruoyi和element admin两款,很多小伙伴分不清二者,本文为大家详细讲解一下。 一、若依Ruoyi-vue是什么? 若依Ruoyi-Vue是一款基于 Vue.js 开发的…

React基础教程:TodoList案例

todoList案例——增加 定义状态 // 定义状态state {list: ["kevin", "book", "paul"]}利用ul遍历list数组 <ul>{this.state.list.map(item ><li style{{fontWeight: "bold", fontSize: "20px"}} key{item.i…

DAC测试实验——FPGA学习比

一、DAC简介 DAC全称Digital to Analog Converter&#xff0c;即数模转换器。它用于将主控芯片产生的数字值(0和1)转换为模拟值(电压值)。 1、DAC参数指标 2、DAC类型 常用的DAC可大致分为权电阻网络DAC、T型电阻网络DAC、倒T型电阻网络DAC以及权电流型DAC。 3、AD9708/3PD9…

Idea jdk配置的地方 启动时指定切换的地方

jdk 配置的地方 项目sdk 所在位置 管理添加或删除的地方&#xff0c;增加后&#xff0c;可以在在上面切换 启动时指定版本

富格林:力争打破黑幕安全盈利

富格林认为&#xff0c;在当前全球环境因素的影响下&#xff0c;黄金价格会波动地相对频繁些。现货黄金作为一种可以双向交易的金融产品&#xff0c;为投资者提供了丰富的获利机会。然而&#xff0c;伴随着盈利机会而来的是黑幕风险。在安全盈利的同时&#xff0c;还需要防范黑…

Ant-Design-Vue 动态表头

Ant Design Vue 是一个基于 Vue.js 的企业级 UI 组件库&#xff0c;提供了丰富的 UI 组件以满足不同的需求。在处理动态表头和动态数据时&#xff0c;你通常需要结合 Vue 的数据绑定和循环渲染特性来实现。 下面是一个基本的例子&#xff0c;展示如何使用 Ant Design Vue 的 a…

基于机器学习的CFD模型降阶

降阶模型 ROM 降阶模型ROM&#xff08;Reduced Order Models&#xff09;是一种对高保真度静态或动态模型的简化方法。模型降阶在保留了模型的基本特性与主导效应的同时&#xff0c;大大减少复杂模型的CPU计算时间及存储空间。 ROM的用途&#xff1a; 加速大规模系统的仿真速度…

pytorch学习笔记7

getitem在进行索引取值的时候自动调用,也是一个魔法方法,就像列表索引取值那样,一个意思 import torchvision from torch.utils.data import DataLoaderdata_transformtorchvision.transforms.Compose([torchvision.transforms.ToTensor()] ) test_datatorchvision.datasets.C…