当前位置: 首页 > news >正文

【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门

🍑个人主页:Jupiter.
🚀 所属专栏:QT
欢迎大家点赞收藏评论😊

在这里插入图片描述

在这里插入图片描述

目录

    • ` Qt Creator 新建项⽬`
    • `认识 Qt Creator 界⾯`
    • `项⽬⽂件解析`
    • `Qt 编程注意事项`
    • `认识对象模型(对象树)`
    • `Qt 窗⼝坐标体系`


Qt Creator 新建项⽬

  1. 打开 Qt Creator ,在菜单栏中选中: “⽂件” --> “新建⽂件或项⽬” ;或者使⽤快捷键:Ctrl + n;
  1. 选择项⽬模板
  • 弹出如下对话框:
  • 新建项⽬对话框⾥有五类项⽬模板:
项⽬模板说明
ApplicationQt 应⽤程序,包括普通窗体程序和 QtQuick 程序
Library可以创建动态库、静态库以及 Qt Quick 扩展插件、QtCreator ⾃⾝插件
Non-Qt-Project⾮ Qt 项⽬。可以创建纯 C 或纯 C++ 项⽬
其他项⽬可以创建单元测试项⽬、Qt4 设计师⾃定义控件、⼦⽬录项⽬等
Import Project导⼊项⽬。从版本控制系统管理的软件项⽬导⼊旧的项⽬

常⽤的只有第⼀类 Application,选择它,在右侧会看到 Qt 应⽤程序的五个⼦模板:

  • Qt Widgets Application:普通窗体模板,传统基于部件的窗体界⾯程序。
  • Qt Console Application:Qt 控制台应⽤程序。因为 Qt 主要⽤于图形界⾯设计,这个控制台项⽬模板基本不⽤。
  • Qt for Python:在Python下⽤ LGPL 的许可来开发闭源 Qt 软件。
  • Qt Quick Application: Qt 提供的⼀种⾼级⽤⼾界⾯技术,使⽤它可以⽅便快速的为移动以及嵌⼊式设备开发流畅美观的⽤⼾界⾯。Qt Quick 模块是开发 QML 应⽤的标准库,提供了使⽤ QML 创建⽤⼾界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒⼦效果以及着⾊效果等。

💡 选择不同的项⽬模板, Qt Creator 就会在后续项⽬创建好了之后⽣成不同的基础代码

  1. 选择项⽬路径
  1. 选择构建系统
  • 选择 Qt 项⽬的构建系统,使⽤默认的 “qmake” 即可。

Qt 中的构建⼯具有三种可供选择,分别是:qmake、CMake、Qbs。

  • qmake: qmake 是⼀个构建⼯具(build tool),⽤于⾃动⽣成 makefile ⽂件。qmake ⽀持跨平
    台构建。qmake 编辑的是⼀个后缀名为 .pro 的⽂件。
  • CMake:CMake 是⼀个跨平台的构建⼯具。CMake 本⾝不是⼀个编译器,其实就是⽣成⼀个让编译器能读懂编译流程的⽂件⼯具。让 CMake ⾃动⽣成构建系统,例如 Makefile 和 Visual Studio项⽬⽂件。CMake 是⼀个第三⽅⼯具,有⾃⼰的⽂档。
  • Qbs:Qbs(Qt Build Suite:Qt构建套件)同 qmake、CMake ⼀样都是构建⼯具。Qbs 号称是新⼀代的构建⼯具,⽐ qmake 编译速度更快。Qbs 没有绑定 Qt 版本,它从项⽬⽂件的⾼级项⽬描述中⽣成⼀个正确的依赖表。⽽传统的 MakeFile ⽣成⼯具如 qmake 和 CMake ,其在⽣成 MakeFile⽂件后将实际的命令交给 Make ⼯具去执⾏。
  1. 填写类信息设置界⾯

对于基类的选择,⽬前有三种基类:

在这里插入图片描述

基类说明
QMainWindow主窗⼝类,⼀般⽤于较为复杂的应⽤程序,除了中央客⼾区界⾯,还包括菜单栏、⼯具栏、状态栏以及多个可停靠的⼯具对话框等
QWidget最简单、最基本的窗体程序,⾥⾯可以放置多个控件实现程序功能
QDialog基于对话框的程序,对话框⼀般⽤于弹窗,也可以⽤于主界⾯显⽰。对话框是从QWidget继承⽽来的,并丰富了⼀些功能,如模态显⽰和返回值等

上述三个类之间的关系如下图:

  1. 选择语⾔和翻译⽂件

此处选择的语⾔是 “汉语”, “英语” 这样的语⾔. ⽽不是 “编程语⾔”,由于我们暂时不考虑国际化问题, 直接下⼀步即可.

  1. 选择 Qt 套件
  • 默认只有第⼀个 “Desktop Qt 5.14.2 MinGW 64-bit”,如果安装配置了多个 Qt 套件,就可以都选上。Qt 套件是指 Qt 程序从编译链接到运⾏环境的全部⼯具和 Qt 类库的集合,对于 MinGW 版本 Qt 程序⽣成和调试,⾄少需要 MinGW 中的编译器 g++(⾃动调⽤链接器)、g++ 配套的基础库、调试器 gdb 还有使⽤ MinGW 环境编译⽽成的 Qt 类库⾃⾝。默认情况下,在上⾯ Kit Selection ⾥选中全部套件。
  1. 选择版本控制系统
  • 点击 “下⼀步” 进⼊ 项⽬管理界⾯;在项⽬管理界⾯可以设置作为⼦项⽬,以及加⼊版本控制系统管理。这两个功能暂时⽤不到,都⽤默认的 ,然后点击 “完成” 。

  • 如果想把代码提交到码云或者 github, 可以在此处选择 git 作为版本控制系统.

  1. 最终效果
  • 通过上述 8 个步骤, 完成了项⽬的创建

  • 项⽬创建完成之后,Qt Creator 会直接进⼊代码编辑模式,可以看到类似下图界⾯:

认识 Qt Creator 界⾯

  • 1. 左边栏

边栏⼦窗⼝标题栏第⼀个控件是组合框,可以选择该⼦窗⼝的功能视图类型,⽬前可以选择 8 个视图类型:

视图类型说明
项⽬即项⽬⽂件管理视图,可以选择项⽬⾥的⽂件进⾏编辑,包括 pro ⽂件也可以⼿动编辑。
打开⽂档当前已经打开的⽂件列表,⽂件名右边如果有 * 号,是该⽂件被修改了但尚未保存。
书签右击代码编辑器⾏号位置,看到 “切换书签”,可以给代码⾏添加书签,⽅便跳转到该位置。
⽂件系统相当于系统⾥的⽂件资源管理器,可以查看项⽬⽂件夹在磁盘⾥的实际⽂件列表。
类视图可以查看项⽬⾥包含的类及相应源代码⽂件⾥的成员函数、成员变量。
Git Branches查看当前分⽀
⼤纲编辑器所显⽰的当前⽂件的⼤纲列表,如名字空间、类名、成员函数、成员变量等。
Tests测试
类型层次当前项⽬包含的类及其基类、派⽣类列表。
Include Hierarchy包含视图,显⽰当前项⽬⾥ .h 、.cpp 以及 Qt 类库头⽂件之间的包含关系。

2. 代码编辑区

在这里插入图片描述
①和②:导航按钮 “返回” 和 “前进”,这与⽹⻚浏览器的前进和后退按钮类似,可以在之前浏览的多个代码⽂件或⼀个代码⽂件⾥多个位置之间快速切换。
③:标识当前显⽰的⽂件是只读还是可写,⼀般都是可写的。
④:⽂件类型图标,当前显⽰⽂件的类型,这个控件其实是⼀个菜单按钮,点击可以弹出丰富的⽂件处理功能菜单。
⑤:打开的⽂件名,可以在多个打开的⽂件之间选择切换,与边栏的 “打开⽂档” 视图是对应的。
⑥:关闭当前显⽰的⽂档。
⑦:为当前显⽰的⽂件添加额外的C++预处理指令,⼀般⽤不着。
⑧:选择符号,可以在当前显⽰的⽂件⾥多个函数、类、成员变量等之前快速切换,与边栏"⼤纲"视图是对应的。
⑨:编辑区光标的⾏号和列号。
⑩:代码编辑区分栏,可以增加多个编辑器窗⼝,显⽰多个打开的⽂档或显⽰较⼤源码⽂件的多个位置。

  • ⾏⾸区:主要⽤来显⽰代码⾏号,以及调试断点标志和代码书签标志。右击⾏⾸区可以弹出右键菜
    单,菜单⾥可以切换书签、编辑书签以及设置或取消断点。
  • 同⼀⾏是既可以打断点也可以设置书签的,⼆者不冲突,其实它们根本就没关系。单击⾏号前⾯的浅灰⾊空⽩区可以直接打断点,再次单击可以取消断点,另外也可以⽤快捷键 F9 设置或取消断点。
  • 代码书签⼀般⽤右键菜单来设置,也可以⽤快捷键 Ctrl+M 设置或取消书签。
  • 编辑区:写代码的区域。

3. UI设计界⾯

  • 双击 widget.ui ⽂件,Qt Creator 会⾃动进⼊设计模式,可以对图形界⾯进⾏可视化编辑:

在这里插入图片描述
①:组件选择窗⼝。组件选择窗⼝分为多个组,如 Layouts、Buttons、Display Widgets 等,界⾯设计的常⻅组件都可以在组件选择窗⼝中找到。
②:UI 设计窗⼝。如果要将某个组件放置到该窗⼝上时,从组件选择窗⼝上拖放⼀个组件到窗体上即可。
③:动作编辑窗⼝。动作编辑窗⼝包括 Action Editor 以及 Signals 和 Slots 编辑器。 Action Editor 主要是⽤来新建 Action,并且通过拖拽的动作,将新建好的 Action 添加到菜单栏和⼯具栏上;Signals和 Slots 编辑器⽤于可视化地进⾏信号与槽的关联。
④:对象浏览窗⼝。⽤树状视图显⽰窗体上各组件之间的布局包含关系,视图有两列,显⽰每个组件的对象名称(ObjectName)和类名称。
⑤:属性设置窗⼝。显⽰某个选中的组件或窗体的各种属性及其取值,可以在属性设置窗⼝⾥修改这些属性的值。

4. 构建区

项⽬⽂件解析

1. pro ⽂件解析

  • ⼯程新建好之后,在⼯程⽬录列表中有⼀个后缀为 “.pro” 的⽂件, “.pro” ⽂件就是⼯程⽂件 (project),它是 qmake ⾃动⽣成的⽤于⽣产 makefile 的配置⽂件。如图所⽰:

双击进⼊该⽂件,该⽂件的核⼼内容如下:

QT += core gui // Qt 包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //⼤于 Qt4 版本才包含 widget 模块
TARGET = QtFirst //应⽤程序名⽣成的 .exe 程序名称
TEMPLATE = app //模板类型,应⽤程序模板
SOURCES += main.cpp\ //源⽂件
widget.cpp //源⽂件
HEADERS += widget.h //头⽂件

“.pro” ⽂件的写法如下:

  • 注释:从 “#” 开始,到这⼀⾏结束。
  • QT += core gui // Qt 包含的模块 Qt5 包含的模块如下图所⽰:
  • greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 这条语句的含义是,如果
    QT_MAJOR_VERSION ⼤于 4 也就是当前使⽤的 Qt5 及更⾼版本) 需要增加 widgets 模块。如果项⽬仅需⽀持 Qt5 , 也可以直接添加 “QT += widgets” ⼀句。不过为了保持代码兼容 ,最好还是按照 QtCreator ⽣成的语句编写。
  • 指定⽣成的应⽤程序名:TARGET = QtDemo
  • TEMPLATE = app //模板。告诉 qmake 为这个应⽤程序⽣成哪种 makefile。下⾯是可供选择的模
    板:
    • app:建⽴⼀个应⽤程序的 makefile。这是默认值,所以如果模板没有被指定,这个将被使⽤
    • lib :建⽴⼀个库的 makefile。
  • vcapp:建⽴⼀个应⽤程序的 VisualStudio 项⽬⽂件。
  • vclib: 建⽴⼀个库的 VisualStudio 项⽬⽂件。
  • subdirs:这是⼀个特殊的模板,它可以创建⼀个能够进⼊特定⽬录的 makefile 并且为它调⽤make 的 makefile。
  • ⼯程中包含的源⽂件:SOURCES += main.cpp/widget.cpp
  • ⼯程中包含的头⽂件:HEADERS += widget.h
  • ⼯程中包含的资源⽂件:RESOURCES += painter.qrc
  • ⼯程中包含的 “ui” 设计⽂件:FORMS += widget.ui
  • 配置信息:CONFIG += c++11 (使⽤ c++11 的特性) CONFIG ⽤来告诉 qmake 关于应⽤程序的置信息。

2. widget.h ⽂件解析

  • 在Qt中,如果要使⽤信号与槽(signal 和 slot)的机制 就必须加⼊ Q_OBJECT 宏;
    Ui::Widget *ui; 这个指针是⽤前⾯声明的 namespace Ui ⾥的 Widget 类定义的,所以指针 ui 是指向可视化设计的界⾯,后⾯要访问界⾯上的组件,都需要通过这个指针 ui 去访问。

3.main.cpp ⽂件解析

  • 使⽤ Qt Creator 新建任意⼯程之后,main.cpp ⽂件中都会⾃动⽣成如下代码:

解释:

  • Qt 系统提供的标准类名 声明头⽂件没有 .h 后缀;
  • Qt ⼀个类对应⼀个头⽂件,类名 就是 头⽂件名;
  • QApplication 为应⽤程序类;QApplication a;(a为应⽤程序对象,有且仅有⼀个)
    • QApplication 管理图形⽤⼾界⾯应⽤程序的控制流和主要设置。
    • QApplication 是 Qt 的整个后台管理的命脉。它包含主事件循环,在其中来⾃窗⼝系统和其它资源的所有事件处理和调度。它也处理应⽤程序的初始化和结束,并且提供对话管理。
    • 对于任何⼀个使⽤ Qt 的图形⽤⼾界⾯应⽤程序,都正好存在⼀个 QApplication 对象,⽽不论这个应⽤程序在同⼀时间内是不是有 0、1、2 或更多个窗⼝。
  • myWidget w; //实例化窗⼝对象
  • w.show(); //调⽤show函数显⽰窗⼝
  • a.exec() :程序进⼊消息循环,等待对⽤⼾输⼊进⾏响应。这⾥ main()把控制权转交给Qt,Qt 完
    成事件处理⼯作,当应⽤程序退出的时候 exec() 的值就会返回。在 exec() 中,Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗⼝部件。

4. widget.cpp ⽂件解析

  • widget.cpp ⽂件是类 Widget 的实现代码,所有在窗体上要实现的功能添加在此⽂件中;

5. widget.ui ⽂件解析

widget.ui 是窗体界⾯定义⽂件,是⼀个 XML ⽂件,定义了窗⼝上的所有组件的属性设置、布局,及其信号与槽函数的关联等。⽤ UI 设计器可视化设计的界⾯都由 Qt ⾃动解析,并以 XML ⽂件的形式保存下来。在设计界⾯时,只需在 UI 设计器⾥进⾏可视化设计即可,⽽不⽤管 widget.ui ⽂件是怎么⽣成的。

Qt 编程注意事项

Qt 中的命名规范

  • 类名:⾸字⺟⼤写,单词和单词之间⾸字⺟⼤写;

  • 函数名及变量名:⾸字⺟⼩写,单词和单词之间⾸字⺟⼤写;

  • 💡 Qt 偏好驼峰命名法. 这⼀点不像咱们之前课堂上偏好蛇形命名.

Qt Creator 中的快捷键

  • 注释:ctrl + /
  • 运⾏:ctrl + R
  • 编译:ctrl + B
  • 字体缩放:ctrl + ⿏标滑轮
  • 查找:ctrl + F
  • 整⾏移动:ctrl + shift + ⬆/⬇
  • 帮助⽂档:F1
  • ⾃动对⻬:ctrl + i;
  • 同名之间的 .h 和 .cpp 的切换:F4
  • ⽣成函数声明的对应定义: alt + enter

使⽤帮助⽂档

打开帮助⽂档有三种⽅式. 实际编程中使⽤哪种都可以.

  1. 光标放到要查询的类名/⽅法名上, 直接按 F1
  2. Qt Creator 左侧边栏中直接⽤⿏标单击 “帮助” 按钮:
  1. 找到 Qt Creator 的安装路径,在 “bin” ⽂件夹下找到 assistant.exe,双击打开;

双击打开后的界面

认识对象模型(对象树)

在 Qt 中创建很多对象的时候会提供⼀个 Parent 对象指针,下⾯来解释这个 parent 到底是⼲什么的?

  • QObject 是以对象树的形式组织起来的。

    • 当创建⼀个 QObject 对象时,会看到 QObject 的构造函数接收⼀个 QObject 指针作为参数,这个参数就是 parent,也就是⽗对象指针。
    • 这相当于,在创建 QObject 对象时,可以提供⼀个其⽗对象,我们创建的这个 QObject 对象会⾃动添加到其⽗对象的 children( ) 列表。
    • 当⽗对象析构的时候,这个列表中的所有对象也会被析构。(注意: 这⾥的⽗对象并不是继承意义上的⽗类!)这种机制在 GUI 程序设计中相当有⽤。例如,⼀个按钮有⼀个 QShortcut(快捷键)对象作为其⼦对象。当删除按钮的时候,这个快捷键理应被删除。这是合理的。
  • QWidget 是能够在屏幕上显⽰的⼀切组件的⽗类。

    • QWidget 继承⾃ QObject ,因此也继承了这种对象树关系。⼀个孩⼦⾃动地成为⽗组件的⼀个⼦组件。因此,它会显⽰在⽗组件的坐标系统中,被⽗组件的边界剪裁。例如,当⽤⼾关闭⼀个对话框的时候,应⽤程序将其删除,那么,我们希望属于这个对话框的按钮、图标等应该⼀起被删除。事实就是如此,因为这些都是对话框的⼦组件。
    • 当然,我们也可以⾃⼰删除⼦对象,它们会⾃动从其⽗对象列表中删除。⽐如,当我们删除了⼀个⼯具栏时,其所在的主窗⼝会⾃动将该⼯具栏从其⼦对象列表中删除,并且⾃动调整屏幕显⽰。
  • Qt 引⼊对象树的概念,在⼀定程度上解决了内存问题

    • 当⼀个 QObject 对象在堆上创建的时候,Qt 会同时为其创建⼀个对象树。不过,对象树中对象的 顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。
    • 任何对象树中的 QObject 对象 delete 的时候,如果这个对象有 parent,则⾃动将其从 parent 的children() 列表中删除;如果有孩⼦,则⾃动 delete 每⼀个孩⼦。Qt 保证没有 QObject 会被delete 两次,这是由析构顺序决定的。

如果 QObject 在栈上创建,Qt 保持同样的⾏为。正常情况下,这也不会发⽣什么问题。来看下⾯的代码⽚段:

作为⽗组件的 window 和作为⼦组件的 quit 都是 QObject 的⼦类(事实上,它们都是QWidget的⼦类,⽽QWidget 是 QObject 的⼦类)。这段代码是正确的,quit 的析构函数不会被调⽤两次,因为标准 C++ 要求,局部对象的析构顺序应该按照其创建顺序的相反过程。因此,这段代码在超出作⽤域时,会先调⽤ quit 的析构函数,将其从⽗对象 window 的⼦对象列表中删除,然后才会再调⽤window 的析构函数。

但是,如果我们使⽤下⾯的代码:

情况⼜有所不同,析构顺序就有了问题。我们看到,在上⾯的代码中,作为⽗对象的 window 会⾸先被析构,因为它是最后⼀个创建的对象。在析构过程中,它会调⽤⼦对象列表中每⼀个对象的析构函数,也就是说, quit 此时就被析构了。然后,代码继续执⾏,在 window 析构之后,quit 也会被析构,因为 quit 也是⼀个局部变量,在超出作⽤域的时候当然也需要析构。但是,这时候已经是第⼆次调⽤ quit 的析构函数了,C++ 不允许调⽤两次析构函数,因此,程序崩溃了。

由此我们看到,Qt 的对象树机制虽然在⼀定程度上解决了内存问题,但是也引⼊了⼀些值得注意的事情。

  • 💡 在 Qt 中,尽量在构造的时候就指定 parent 对象,并且⼤胆在堆上创建。

Qt对象树如图:

在这里插入图片描述

  • 对象树确保的是先释放⼦节点的内存, 后释放⽗节点的内存.
  • ⽽析构函数的调⽤顺序则不⼀定遵守上述要求. 因为上面看到⼦节点的析构执⾏顺序反⽽在⽗节点析构顺序之后.
  • 注意: 调⽤析构函数和释放内存并⾮是同⼀件事情

Qt 窗⼝坐标体系

  • Qt坐标系使用的是左手坐标系。
  • 坐标体系:以左上⻆为原点(0,0),X向右增加,Y向下增加。
  • 对于嵌套窗⼝,其坐标是相对于⽗窗⼝来说的。
    ⽰例:使⽤Qt中的坐标系设置控件的位置;
  • 运⾏结果如下图⽰:

相关文章:

【Qt】Qt Creator开发基础:项目创建、界面解析与核心概念入门

🍑个人主页:Jupiter. 🚀 所属专栏:QT 欢迎大家点赞收藏评论😊 目录 Qt Creator 新建项⽬认识 Qt Creator 界⾯项⽬⽂件解析Qt 编程注意事项认识对象模型(对象树)Qt 窗⼝坐标体系 Qt Creator 新…...

CAP应用

1.工作原理 CAP(Consistent,Available,Partition - tolerant)框架在.NET 中的工作原理。CAP 是一个用于.NET 的分布式事务解决方案,主要用于实现微服务架构中的数据一致性(实现分布式事务的最终一致性&…...

典型操作系统内核架构

在典型操作系统架构(如下图所示)中,内核负责以安全、公平的方式为多个应用程序管理和共享硬件资源。 内核通过一组 API(即系统调用)向应用程序提供服务。这些 API 不同于常规库函数,因其是用户模式到内核模…...

AWS Redshift的使用场景及一些常见问题

Redshift 不是关系型数据库, 提供了Amazon Redshift Serverless 和 Amazon Redshift 都是构建于 Redshift 数仓引擎之上的,但它们适用的场景不同。Redshift和Dynamodb都可以存储数据, 分别怎么选择? 这里记录一些常见的问题和场景。 1. 如何选择用Amazon Redshift…...

**searchProperties 是什么,python中**是什么:解包字典的操作符

searchProperties 是什么,python中是什么:解包字典的操作符 在 Python 中,** 是用于解包字典的操作符,**searchProperties 是一个可变关键字参数。它允许函数接受任意数量的关键字参数,这些参数会被收集到一个字典中,字典的键是参数名,值是参数对应的值。 在 ButtonCon…...

.NET MCP 文档

MCP 概述 MCP(Model Context Protocol)是由 Anthropic 推出的一种开放协议,类似 AI 的 USB-C 扩展坞,用于在大模型和数据源之间建立安全的通信(授权),让 AI 应用能够安全地访问和操作本地或远程…...

07软件测试需求分析案例-修改用户信息

修改用户信息是后台管理菜单的一个功能模块,只有admin才有修改权限。包括查询用户名进行显示用户相关信息,并且修改用户相关信息的功能。 1.1 通读文档 通读需求规格说明书是提取信息,提出问题,输出具有逻辑、规则、流程的业务…...

第九届“创客中国”中小企业创新创业大赛总决赛企业组三等奖项目—基于AI智能代码疫苗技术的数字供应链安全解决方案

项目名称:基于AI智能代码疫苗技术的数字供应链安全解决方案 企业名称:北京安普诺信息技术有限公司(悬镜安全) 项目简介: ‍‍‍‍‍ 基于AI智能代码疫苗技术的数字供应链安全解决方案,悬镜安全在全球范围内首创…...

企业级RAG行业应用落地方案——阿里云百炼

行业痛点分析 这张图主要围绕“行业痛点锚定”展开,通过雷达图和表格结合的方式,分析电商选品在不同维度下的情况: 分析对象:聚焦电商选品。维度展示:从可结构化程度、重复性、数据可得性、人机互动性、AI带来的价值这…...

Mac切换node版本

Mac切换node版本 1.首先安装n模块: sudo npm install -g n 2.升级node.js到最新稳定版 sudo n stable 3.升级到最新版 sudo n latest 4.n后面也可以跟随版本号,升级到任意版本 sudo n v0.10.26或sudo n 0.10.26 5.切换使用版本 sudo n 7.10.0 6.删除制定版本…...

从零开始学A2A一:A2A 协议概述与核心概念

A2A 协议概述与核心概念 学习目标 基础理解 掌握A2A协议的基本概念和背景理解协议的设计原则和核心思想了解协议在AI领域的重要性 技术掌握 熟悉A2A协议的核心功能组件掌握能力发现和任务管理机制理解多模态交互和安全通信原则 实践应用 能够设计基于A2A的智能体系统掌握协议…...

科普:如何通过ROC曲线,确定二分类的“理论阈值”

在二分类问题中,已知预测概率(如逻辑回归、神经网络输出的概率值)时,阈值的选择直接影响分类结果(正/负样本判定)。 一、实践中的阈值选择方法 1. 基于业务目标的调整 最大化准确率:适用于样…...

Cherry Studio + MCP,从0到1保姆教程,3个场景体验

📺 详细操作以视频方式呈现,视频地址周五会更新出来 💯 鉴于很多观众网络环境受限,文末提供所需安装文件网盘分享 💬 什么是 MCP ? MCP(Model Context Protocol,MCP)模型…...

Docker学习笔记-docker安装、删除

一、在centOS 7中docker的默认安装目录 # Docker 主配置文件目录 ls /etc/docker# Docker 数据目录(镜像、容器、卷等) ls /var/lib/docker# Docker 可执行文件路径 which docker # 输出类似 /usr/bin/docker 二、docker文件目录说明 目录/文件用途/…...

visual studio 常用的快捷键(已经熟悉的就不记录了)

以下是 Visual Studio 中最常用的快捷键分类整理,涵盖代码编辑、调试、导航等核心场景: 一、生成与编译 ​生成解决方案 Ctrl Shift B 一键编译整个解决方案,检查编译错误(最核心的生成操作)​编译当前文件 Ctrl F…...

使用人工智能大模型腾讯元宝,如何做课题研究?

今天我们学习使用人工智能大模型腾讯元宝,如何做课题研究? 手把手学习视频地址:https://edu.csdn.net/learn/40402/666424 在腾讯元宝对话框中输入如何协助老师做课题(申报书、开题报告、中期报告、结题报告)&#x…...

开源模型应用落地-模型上下文协议(MCP)-第三方MCP Server实战指南(五)

一、前言 在AI技术高速发展的2025年,如何让大语言模型(LLM)更灵活地调用外部工具与数据,成为开发者关注的焦点。​模型上下文协议(MCP)​作为AI与外部资源的“万能接口”,通过标准化交互框架解决了传统集成中的碎片化问题。而第三方MCP Server的引入,进一步降低了开发门…...

python每日一练

题目一 输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次(要求按照每一个不同的数第一次出现的顺序输出)。 解题 错误题解 a list(map(int,input().split())) b [] b.append(a[i]) for i in range(2,11):if a[i] not in b:b.append(a[i]) print(b)但是会…...

跨境贸易之常见的贸易术语

外贸出口中经常会听到FOB、CIF、DDP各种术语,这些都是什么意思呢? 今天我们来介绍一下他们的确切含义。一般来说你听到的这些话语都是表示交货的方式。 如果普通的贸易过程大家一听就明白的,就是货到付款,款到发货,支…...

KingbaseES之KDts迁移SQLServer

项目适配迁移SQLServer至金仓,今天写写KDts-WEB版迁移工具迁移SQLServer至KingbaseES的步骤,以及迁移注意事项. SQLServer版本:SQLServer2012 KingbaseES版本:V009R004C011(SQLServer兼容版) --1.进入数据库客户端工具KDTS工具目录,启动KDts服务: [king…...

Rust编程学习(一): 变量与数据类型

我们先从Rust基本的变量声明定义与数据类型开始学习,了解这门语言基本特性。 1 变量与可变性 变量声明 变量声明以let关键字开头,x为变量名,变量名后紧跟冒号和数据类型,但是rust编译器有自动推导变量类型的功能,可以省略显式的声…...

Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新

一、Java AI 的底层逻辑:从语言特性到生态重构 在 Python 占据 AI 开发主导地位的当下,Java 正通过技术重构实现突围。作为拥有 30 年企业级开发经验的编程语言,Java 的核心优势在于强类型安全、内存管理能力和分布式系统支持,这…...

[极客大挑战 2019]HardSQL1

打开网页,貌似存在SLQ注入,尝试闭合单引号 才生报错信息,但是尝试联合注入 不出意外应该是被过滤了,没法使用,可以考虑一下报错注入 这里可以使用字典爆破一下,利用页面返回情况,看看哪些关键词…...

深入剖析C++中 String 类的模拟实现

目录 引言 一、基础框架搭建 成员变量与基本构造函数 析构函数 二、拷贝与赋值操作 深拷贝的拷贝构造函数 赋值运算符重载 三、字符串操作功能实现 获取字符串长度 字符串拼接 字符串比较 字符访问 四、迭代器相关实现(简单模拟) 迭代器类型…...

KWDB创作者计划— KWDB技术范式革命:从数据存储到认知进化的架构跃迁

引言:数据库的认知觉醒 在AIoT设备数量突破万亿、边缘计算节点算力总和超越云端的2025年,传统数据库的"存储-计算"二元结构正面临认知维度缺失的困境。当工业数字孪生需要实时推演百万设备状态,城市大脑需处理多模态时空数据时&…...

【后端开发】Spring配置文件

文章目录 配置文件properties配置文件基本语法读取配置文件 yml配置文件基本语法读取配置文件配置空字符串及null单双引号配置对象配置集合配置Map 优缺点优点缺点 配置文件 硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中,也就是常说的"代码写死&q…...

探讨HMI(人机界面)设计原则,如何通过优秀的设计提升操作效率和用户体验

在物联网与人工智能深度渗透的今天,人机界面(Human-Machine Interface, HMI)已成为连接数字世界与物理世界的神经末梢。优秀的HMI设计不仅关乎视觉美感,更是认知工程、信息架构与交互范式的协同创新。本文从神经认知科学原理出发&…...

网络7 配置网卡 路由表

我配置了两张网卡,一个是仅主机模式,一个是NAT模式。刚才NAT模式动态配置下,ping百度ping的通,路由表中只显示NAT的网关。我把NAT模式修改为静态IP,路由表中显示仅主机模式的网关和NAT模式的网关,ping百度ping不通了 …...

InnoDB的MVCC实现原理?MVCC如何实现不同事务隔离级别?MVCC优缺点?

概念 InnoDB的MVCC(Multi-Version Concurrency Control)即多版本并发控制,是一种用于处理并发事务的机制。它通过保存数据在不同时间点的多个版本,让不同事务在同一时刻可以看到不同版本的数据,以此来减少锁竞争&…...

同构应用开发

以下是关于 同构应用(Isomorphic/Universal Application)开发 的系统知识梳理,涵盖核心概念、技术实现、性能优化及工程实践,帮助我们全面掌握这一现代Web开发范式: 一、同构应用核心概念 1. 定义与价值 定义:同一套代码在服务端(Node.js)和客户端(浏览器)运行,实现…...

如何制定有效的风险应对计划

制定有效的风险应对计划的核心在于: 识别潜在风险、评估风险的影响与概率、选择合适的应对策略、建立动态监控和反馈机制。 其中,识别潜在风险是最为关键的第一步。只有准确识别出可能的风险,才能在后续的评估、应对、监控等环节中做到有的放…...

使用wpa_cli和wpa_supplicant配置Liunx开发板的wlan0无线网

目录 1 简单介绍下wpa_cli和wpa_supplicant 1.1 wpa_supplicant 简介 1.2 wpa_cli 简介 1.3 它们之间的关系 2 启动wpa_supplicant 3 使用rz工具把wpa_cli命令上传到开发板 4 用wpa_cli配置网络 参考文献: 1 简单介绍下wpa_cli和wpa_supplicant 1.1 wpa_su…...

深度学习模型的概述与应用

📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...

基于Ubuntu系统搭建51单片机开发环境的详细教程

一、环境搭建 1. 安装SDCC编译器 SDCC(Small Device C Compiler)是Linux下常用的开源51单片机编译器,支持多种芯片架构。 安装命令: sudo apt update sudo apt install sdcc 验证安装:输入 sdcc -v,若显…...

通义灵码助力Neo4J开发:快速上手与智能编码技巧

在 Web 应用开发中,Neo4J 作为一种图数据库,用于存储节点及节点间的关系。当图结构复杂化时,关系型数据库的查找效率会显著降低,甚至无法有效查找,这时 Neo4J 的优势便凸显出来。然而,由于其独特的应用场景…...

项目班——0408

qt的多线程开发 一、并发、并行的概念: 1. 并发:多个任务在同一时间段内交替执行(可能共享同一资源),但不一定同时发生。 核心思想:通过快速切换任务(例如时间片轮转)模拟“同时进…...

【Linux】42.网络基础(2.4)

文章目录 2.3 TCP协议2.3.10 拥塞控制2.3.11 延迟应答2.3.12 捎带应答2.3.13 面向字节流2.3.14 粘包问题2.3.15 TCP异常情况2.3.16 TCP小结2.3.17 基于TCP应用层协议 2.3 TCP协议 2.3.10 拥塞控制 虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚…...

大模型在直肠癌诊疗全流程预测及应用研究报告

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法与创新点 二、大模型预测直肠癌的原理与技术基础 2.1 大模型技术概述 2.2 用于直肠癌预测的数据来源 2.3 模型构建与训练过程 三、术前预测 3.1 肿瘤分期预测 3.1.1 基于影像组学的 T 分期预测模型…...

Ceph块存储

#### 一、Ceph块存储 ##### 镜像快照管理 > 实现数据备份、恢复和测试等操作,而不影响原始数据,提高系统的可靠性和可用性。 shell # 创建镜像 rbd create img1 --size 10G # 映射镜像到本地并格式化挂载 rbd map img1 mkfs -t xfs /dev/rbd0 moun…...

【转载翻译】Open3D和PCL的一些比较

转自个人博客:【转载翻译】Open3D和PCL的一些比较 本人在逛Github时,发现一个解答Open3D和PCL对比的小文章,还挺有参考价值的 原文:https://github.com/LaplaceKorea/investigate_open3d_vs_pcl/blob/main/README.rst#whats-the-s…...

ebpf: CO-RE, BTF, and Libbpf(二)

本文内容主要来源于Learning eBPF,可阅读原文了解更全面的内容。 本文涉及源码也来自于书中对应的github:https://github.com/lizrice/learning-ebpf/ 概述 上篇文章主要讲了CO-RE最关键的一环:BTF,了解其如何记录内核中的数据结…...

RHCE第五章:NFS服务器

一、NFS(network file system) 网络文件系统:在互联网中共享服务器中的文件资源(用于Linux主机共享文件的协议)。 使用nfs服务需要安装:nfs-utils 以及 rpcbind nfs-utils : 提供nfs服务的程序 rpcbind :…...

qt(vs2010) 手动配置moc生成规则

在 Visual Studio 2010 中写QT项目时,有时需要 手动配置 MOC 生成规则 操作步骤: 右键 .h 文件 → Properties。在 Configuration Properties > Custom Build Tool 中: Command Line:"$(QTDIR)\bin\moc.exe" "%(FullPath)…...

mongodb 安装配置

1.下载 官网下载地址:MongoDB Community Download | MongoDB 2.使用解压包 解压包安装:https://pan.baidu.com/s/1Er56twK9UfxoExuCPlJjhg 提取码: 26aj 3.配置环境: (1)mongodb安装包位置: &#xf…...

Java多态课堂练习题

Java多态课堂练习题 题目:动物乐园的多态展示 背景设定: 设计一个动物乐园程序,展示不同类型动物的行为特点,要求使用多态特性实现。 1. 基础类设计(已给出部分代码) // 基类:动物 abstract…...

Android Studio 实现自定义全局悬浮按钮

文章目录 一、基础实现方案1. 使用 WindowManager 实现全局悬浮窗2. 布局文件 (res/layout/floating_button.xml)3. 圆形背景 (res/drawable/circle_background.xml)4. 启动服务 二、权限处理1. AndroidManifest.xml 中添加权限2. 检查并请求权限 三、高级功能扩展1. 添加动画效…...

Android Studio 中文字大小的单位详解

文章目录 一、Android 中的尺寸单位1. dp (Density-independent Pixels - 密度无关像素)2. sp (Scale-independent Pixels - 可缩放像素)3. px (Pixels - 像素)4. pt (Points - 磅)5. mm (Millimeters - 毫米) 和 in (Inches - 英寸) 二、文字大小单位的最佳实践1. 始终使用 sp…...

Project ERROR: liblightdm-qt5-3 development package not found问题的解决方法

问题描述:使用make命令进行ukui-greeter-Debian构建时出现Project ERROR: liblightdm-qt5-3 development package not found错误,具体如图: 问题原因:缺乏liblightdm-qt5-3 development软件包 解决方法:安装liblightd…...

基于QT(C++)+SQLServer实现(WinForm)超市管理系统

超市库存管理系 使用 QT 开发,SQLserver 数据库配置 ODBC 数据源:QSQLServer 超市库存管理系统需求规格说明书 1 引言 校园超市的库存物资管理往往是很复杂、很繁琐的。由于所掌握的物资种类众多,订货、管理的渠道各有差异,各个校园超市之间的管理体制…...

06 - 多线程-JUC并发编程-原子类(二)

上一章,讲解java (java.util.concurrent.atomic) 包中的 支持基本数据类型的原子类,以及支持数组类型的原子类,这一章继续讲解支持对实体类的原子类,以及原子类型的修改器。 还有最后java (java…...