QT开发积累——qt中的注释和多行注释的几种方式,函数方法注释生成

在这里插入图片描述

目录

  • 引出
    • qt中的注释和多行注释
      • 方法的注释生成
  • 总结
  • 日积月累,开发集锦
    • 方法参数加const和不加const的区别
    • 方法加static和不加static的区别
    • Qt遍历list提高效率
    • 显示函数的调用
    • 使用`&`与不使用`&`
    • qt方法的参数中使用`&`与不使用`&`
    • 除法的一个坑
  • 项目创建相关
    • 新建一个项目
  • 其他
    • 规范和帮助文档
    • 创建第一个Qt程序
    • 对象树概念
    • 信号signal槽slot
    • 自定义信号和槽
      • 1.自定义信号
      • 2.自定义槽
      • 3.建立连接
      • 4.进行触发
    • 自定义信号重载
      • 带参数的
      • 按钮触发
      • 信号触发信号
      • 拓展
    • lambda表达式
      • 返回值
      • mutable修饰
      • 案例
    • 打开关闭窗口案例

引出

QT开发积累——qt中的注释和多行注释的几种方式,函数方法注释生成


qt中的注释和多行注释

在Qt(一个跨平台的C++应用程序开发框架)中,生成多行注释的方法与标准的C++多行注释方法相同。以下是几种常见的方法来生成多行注释:

**方法一:**使用/* */注释块

这是最常见的多行注释方法,适用于任何C++代码,包括Qt项目。

/*
这是一个多行注释的示例。
这段注释跨越了多行。
*/

方法二:使用多个单行注释

如果注释内容不多,也可以使用多个单行注释来实现多行注释的效果。

// 这是一个多行注释的示例。
// 这段注释跨越了多行。
// 使用多个单行注释来实现。

方法三:使用Qt Creator的快捷键

如果你使用Qt Creator作为开发环境,可以使用快捷键来快速生成多行注释。

  1. 选择要注释的代码块:使用鼠标或键盘选择你想要注释的代码块。
  2. 生成注释
    • 在Windows或Linux上,使用快捷键Ctrl + /来切换选中代码块的注释状态。
    • 在macOS上,使用快捷键Cmd + /来切换选中代码块的注释状态。

方法四:使用Qt Creator的菜单选项

如果你更喜欢使用菜单选项,也可以通过以下步骤来生成多行注释:

  1. 选择要注释的代码块:使用鼠标或键盘选择你想要注释的代码块。
  2. 生成注释
    • 在菜单栏中选择Edit -> Advanced -> Toggle Block Comment

示例代码

以下是一个示例代码,展示了如何在Qt项目中使用多行注释:

#include <QApplication>
#include <QPushButton>int main(int argc, char *argv[])
{QApplication app(argc, argv);/*这是一个多行注释的示例。这段注释跨越了多行。*/QPushButton button("Hello, World!");button.show();return app.exec();
}

注意事项

  • 多行注释不能嵌套,即在一个/* */注释块内不能包含另一个/* */注释块。
  • 使用快捷键或菜单选项生成注释时,确保选中了正确的代码块,以避免不必要的注释。

方法的注释生成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


总结

QT开发积累——qt中的注释和多行注释的几种方式,函数方法注释生成

日积月累,开发集锦

方法参数加const和不加const的区别

在Qt和C++中,方法参数是否加const关键字主要影响该参数在方法内部的修改权限。下面是加const和不加const的区别:

不加const

  1. 可修改性:如果方法参数没有声明为const,那么在该方法内部,你可以修改这个参数的值。
  2. 适用场景:当你需要在方法内部修改传入的参数时,不应该使用const

const

  1. 不可修改性:如果方法参数声明为const,那么在该方法内部,你不能修改这个参数的值。任何尝试修改const参数的行为都会导致编译错误。
  2. 适用场景:当你希望确保方法不会修改传入的参数时,应该使用const。这有助于提高代码的可读性和可维护性,因为它清楚地表明了方法的意图。
  3. 性能优势:在某些情况下,编译器可能会对const参数进行优化,例如通过避免不必要的复制来提高性能。
  4. 安全性:使用const可以减少意外修改参数的风险,从而提高代码的健壮性。

示例

假设有一个Qt类MyClass,它有一个方法process,该方法接受一个字符串参数:

class MyClass : public QObject {Q_OBJECTpublic:void process(QString& text) {// 可以修改texttext.append(" (modified)");}void print(const QString& text) const {// 不能修改text// text.append(" (modified)"); // 这将导致编译错误qDebug() << text;}
};
  • process方法中,参数text没有声明为const,因此可以在方法内部修改它。
  • print方法中,参数text声明为const,因此不能在方法内部修改它。

总结来说,方法参数加const主要是为了确保该参数在方法内部不被修改,从而提供更好的代码清晰度和安全性。如果不加const,则意味着参数可以在方法内部被修改。根据方法的实际需求和设计意图,选择合适的const使用方式。

方法加static和不加static的区别

在Qt类中,方法(成员函数)是否声明为static主要影响该方法的访问方式和作用域。下面是static方法和非static方法之间的主要区别:

static方法(实例方法)

  1. 访问方式:非static方法必须通过类的实例(对象)来调用。这意味着你需要先创建一个类的对象,然后才能调用其方法。
  2. 访问成员变量:非static方法可以访问类的所有成员变量,包括privateprotected成员。
  3. 作用域:每个对象都有自己的一组非static成员变量的副本,因此非static方法操作的是调用它的对象的成员变量。
  4. 生命周期:非static方法的生命周期与对象的生命周期相关联。

static方法(类方法)

  1. 访问方式static方法可以直接通过类名来调用,无需创建类的实例。例如,ClassName::staticMethod()
  2. 访问成员变量static方法只能访问类的static成员变量。它不能直接访问非static成员变量,因为static方法不与任何特定的对象实例关联。
  3. 作用域static方法属于类本身,而不是类的任何特定实例。因此,它操作的是类的static成员变量,这些变量在所有实例之间共享。
  4. 生命周期static方法的生命周期与程序的生命周期相同,不依赖于对象的创建或销毁。

示例

假设有一个Qt类MyClass,它有一个非static方法nonStaticMethod()和一个static方法staticMethod()

class MyClass : public QObject {Q_OBJECTpublic:MyClass() {}void nonStaticMethod() {// 可以访问非static成员变量// 必须通过对象调用}static void staticMethod() {// 只能访问static成员变量// 可以直接通过类名调用}private:int nonStaticVar;static int staticVar;
};int MyClass::staticVar = 0;
  • 调用nonStaticMethod()
MyClass obj;
obj.nonStaticMethod();

调用staticMethod()

  • MyClass::staticMethod();
    

总结来说,static方法和非static方法的主要区别在于它们如何与类的实例和成员变量交互,以及如何被调用。static方法更像是全局函数,但它们属于类,并且只能访问类的static成员。而非static方法则与类的实例紧密相关,可以访问所有类型的成员变量。

Qt遍历list提高效率

在Qt中遍历QList或其他容器时提高运算效率主要依赖于以下几点:

  1. 使用迭代器而非索引访问:对于QList和其他Qt容器类,使用迭代器进行遍历通常比使用索引访问元素更高效,特别是在非随机访问容器(如QList对于大型对象)中。这是因为迭代器直接引用容器中的元素,而不是通过索引重新计算位置。
QList<int>::iterator it;
for (it = list.begin(); it != list.end(); ++it) {// 使用 *it 访问元素
}

或者使用C++11的范围基于的for循环:

for (int &element : list) {// 使用 element
}

避免不必要的对象复制:如果你的QList包含的是自定义类型或大型对象,请确保在遍历时使用引用(或常量引用,如果你不需要修改它们),这样可以避免遍历过程中对象的不必要拷贝。

for (CustomType &item : list) {// 使用 item
}

如果不需要修改元素,使用常量引用:

for (const CustomType &item : list) {// 只读访问 item
}

考虑使用更合适的容器QList是一个非常通用的容器,但并不总是最高效的选择。如果你需要频繁地在序列中间插入或删除元素,可能会更倾向于使用QLinkedList。如果元素经常被访问(特别是随机访问),则QVector可能是更好的选择。选择最适合你需求的容器类型可以显著提高性能。

减少遍历次数:有时可以通过算法优化来减少对容器的遍历次数。例如,如果可能,尝试将多个操作合并到单个遍历中完成,而不是对同一个列表进行多次遍历。

使用Qt Concurrent进行并行处理:对于大型数据集和可以并行处理的任务,考虑使用Qt Concurrent模块中的函数,如QtConcurrent::map,它可以自动地将任务分配到多个线程中执行,从而利用多核处理器的优势。

#include <QtConcurrent>void processItem(int &item) {// 对 item 进行处理
}QList<int> list = ...;
QtConcurrent::map(list, processItem);

遵循这些指导原则可以帮助你在Qt应用程序中提高遍历QList(以及其他容器)的运算效率。然而,请记住,性能优化应该是基于实际需要和通过分析确定的瓶颈来进行的。在许多情况下,代码的清晰性和可维护性比微小的性能提升更为重要。

显示函数的调用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用&与不使用&

在C++中,使用&与不使用&在for循环中会产生不同的行为:

  1. 使用 &: 当在范围for循环(range-based for loop)中使用引用符号&时,你将获得对容器内元素的直接引用。这意味着在循环内部对这些元素进行的任何修改都会反映到原始容器中的元素上。例如:
for (CircleData &ct : cList) {ct.someProperty = newValue; // 这将修改cList中元素的属性
}

在这个例子中,任何对ct的修改都会直接修改cList中的对应CircleData对象。

不使用 &: 如果不使用引用符号,范围for循环将创建容器内每个元素的副本。在这种情况下,循环内部对副本所做的任何修改都不会影响原始容器中的元素。例如:

for (CircleData ct : cList) {ct.someProperty = newValue; // 这只会修改副本的属性,并不会影响cList中的元素
}

在这个例子中,ctCircleData对象的一个临时副本,对它的修改不会影响cList中的原始对象。

总之,如果你打算修改循环中的元素,应当使用引用(&),这将避免不必要的对象副本并确保修改作用于容器中的实际元素。如果你不需要修改元素或者只是想读取元素的数据,那么可以省略&来避免潜在的副作用。然而,即使在只读情况下,为了避免不必要的拷贝操作,通常也会使用常量引用(const &),如下:

for (const CircleData &ct : cList) {// 只读取ct的数据,不进行修改
}

这样可以提高效率,特别是在处理大型对象时。

qt方法的参数中使用&与不使用&

在 Qt 和 C++ 中,方法参数中使用 & 和不使用 & 的区别主要涉及到参数传递的方式,即值传递和引用传递。这两种方式在性能、副作用和语义上有所不同。

值传递

当方法参数不使用 & 时,参数是通过值传递的。这意味着在调用方法时,会创建参数的一个副本,并在方法内部使用这个副本。

void modifyValue(int value) {value = 10;
}int main() {int x = 5;modifyValue(x);qDebug() << x; // 输出: 5return 0;
}

在这个例子中,modifyValue 方法接收一个 int 类型的参数 value,并修改其值为 10。但由于 value 是通过值传递的,原始变量 x 的值不会被修改。

引用传递

当方法参数使用 & 时,参数是通过引用传递的。这意味着在调用方法时,传递的是原始变量的引用,而不是副本。因此,在方法内部对参数的任何修改都会直接反映到原始变量上。

void modifyValue(int &value) {value = 10;
}int main() {int x = 5;modifyValue(x);qDebug() << x; // 输出: 10return 0;
}

在这个例子中,modifyValue 方法接收一个 int 类型的引用参数 value,并修改其值为 10。由于 value 是通过引用传递的,原始变量 x 的值被修改为 10。

常量引用传递

在某些情况下,你可能希望避免参数的副本创建,但又不想修改原始变量。这时可以使用常量引用传递。

void printValue(const int &value) {qDebug() << value;
}int main() {int x = 5;printValue(x); // 输出: 5return 0;
}

在这个例子中,printValue 方法接收一个 const int & 类型的参数 value,并打印其值。由于 value 是常量引用,方法内部不能修改其值,但可以避免创建副本,提高性能。

总结

  • 值传递:创建参数的副本,方法内部对参数的修改不会影响原始变量。
  • 引用传递:传递原始变量的引用,方法内部对参数的修改会直接影响原始变量。
  • 常量引用传递:避免创建副本,同时保证参数不被修改。

在 Qt 和 C++ 编程中,选择合适的参数传递方式可以提高代码的性能和可读性。通常,对于大型对象或需要在方法内部修改参数值的情况,使用引用传递或常量引用传递是更好的选择。

除法的一个坑

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在C++(包括Qt)中,如果你执行整数除法(例如 1 / 2),结果将是一个整数,因为操作数都是整数。这意味着结果会被截断,而不是四舍五入。因此,1 / 2 的结果将是 0,而不是 0.5

如果你想得到 0.5 这个结果,你需要确保至少有一个操作数是浮点数。这可以通过将其中一个操作数显式转换为浮点数来实现,或者直接使用浮点数进行运算。

以下是在Qt中如何将 1 / 2 的结果用浮点数接收的示例:

#include <QDebug>int main() {// 方法1: 将其中一个操作数转换为浮点数float result1 = static_cast<float>(1) / 2;qDebug() << "Result 1:" << result1;  // 输出: Result 1: 0.5// 方法2: 直接使用浮点数进行运算float result2 = 1.0f / 2.0f;qDebug() << "Result 2:" << result2;  // 输出: Result 2: 0.5return 0;
}

在这两个示例中,我们都确保了除法运算至少有一个浮点数参与,这样结果就会是浮点数,而不是整数。这样,当你将结果赋值给一个浮点数变量时,你将得到正确的浮点数结果 0.5

项目创建相关

新建一个项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


其他

规范和帮助文档

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

//类名首字母大写,单词和单词之间首字母大写
//函数名变量名称首字母小写,单词和单词之间首字母大写
//快捷键
//注释ctrl +/
// 运行 ctrl +r
// 编译 ctrl b
//字体缩放ctr1+ 鼠标滚轮
//查找 ctrl+f
//整行移动 ctrl+shift+↑或者,
//帮助文档F1
//自动对齐 ctrl i;
//同名之间的.h和.cpp切换 F4
//帮助文档第一种方式F1第二种左侧按钮 1
//D:\MyPrograme\QT\5.14.2\mingw73_32\bin

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建第一个Qt程序

2.1点击创建项目后,选择项目路径到以及给项目起名称
2.2名称·不能有中文不能有空格
2.3路径·不能有中文路径
2.4默认创建有窗口类,yWidget,基类有三种选择:QWidget、QMainWindowQDialog

2.5 main函数
2.5.1 QApplication a应用程序对象,有且仅有一个
2.5.2 mywidget w;实例化窗口对象
2.5.3 w.show0调用show函数显示窗口
2.5.4 return a.exec(让应用程序对家进入消总循环机,制中,代码阻塞到当前行

#include "mywidget.h"#include <QApplication> // 应用程序头文件
#include <QLabel>// main程序入口 argc 命令行变量数量,argv命令行变量数组
int main(int argc, char *argv[])
{// 应用程序对象,qt中有且只有一个QApplication a(argc, argv);// 窗口默认不显示,需要调用show方法myWidget w;w.show();// 进入消息循环,死循环return a.exec();
}

3按钮控件常用API
3.1 创建QPushButton*btn=new QPushButton
3.2 设置父亲setParent(this
3.3 设置文本 setText(文字")
3.4 设置位置move宽,高W
3.5 重新指定商口大小 resize
3.6 设置窗口标题 setwindowTitle
3.7 设置窗口固定大小setFixedsize

#include "mywidget.h"#include <QLabel>
#include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent)
{QLabel *label = new QLabel("hello qt");label->setParent(this);// 创建按钮QPushButton *btn = new QPushButton("第二个按钮",this);btn->move(100,100);// 充值窗口大小resize(600,400);setWindowTitle("第一个窗口");
}myWidget::~myWidget()
{
}

对象树概念

4对像树
4.1 当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。
4.2 一定程度上简化了内存回收机制

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信号signal槽slot

信号的发送者,发送的具体信号,信号的接受者,信号的处理(槽)

信号槽的优点,松散耦合,信号发送端和接受端本身是没有关联的,通过 connect连接将两端耦合在一起

6信号和槽
6.1连接函数:connect
6.2参数
6.2.1参数1 信号的发送者
6.2.2参数2 发送的信号(函数地址)
6.2.3参数3 信号的接受者
6.2.4参数4 处理的槽函数(函数的地址)
6.3松散羯合

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义信号和槽

1.自定义信号

写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重戟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.自定义槽

返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.建立连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

// 老师饿了,学生请吃饭
connect(te,&Teacher::hungry,st,&Student::treat);

4.进行触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义信号重载

当自定义信号和槽出现重载
8.1 需要利用还数指针明确指向函数的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString转成char *
8.3.1.ToUtf80转为QByteArray
8.3.2.Data0转为Char *
8.4信号可以连接信号
8.5断开信号disconnect

带参数的

    void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;void (Student::*StudentSlot)(QString) = &Student::treat;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void Student::treat(QString foodName){// QString -> char * 先转成QByteArray(.toUtf8())  再转成Char* ()qDebug() << "请老师吃。。。" << foodName.toUtf8().data();
}

按钮触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 用一个按钮调用下课QPushButton *btn = new QPushButton("下课了",this);// 重置窗口daxiaothis->resize(600,400);connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);

信号触发信号

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 无参的信号和槽连接void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;void (Student::*StudentSlot2)(void) = &Student::treat;connect(te,teacherSignal2,st,StudentSlot2);// 信号连接信号connect(btn,&QPushButton::clicked,te,teacherSignal2);

断开信号disconnect

拓展

1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个糟函数
4、信号和槽函数的参数必须类型一一对应
5、信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

connect(信号的发送者,发送的信号signal信号),信号接受者,槽函数SLOT)
优点:参数直观
缺点:编译器不会检测爸数类型:

lambda表达式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

在这里插入图片描述

    [=](){btn->setText("aaa");}();

返回值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    int ret = []()->int{return 1000;}();qDebug() << "ret = " << ret;

mutable修饰

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton *myBtn1 = new QPushButton(this);QPushButton *myBtn2 = new QPushButton(this);myBtn1->move(100,100);int m = 10;connect(myBtn1,&QPushButton::clicked,this,[m]()mutable {m=100+10;qDebug()<< m;});connect(myBtn2,&QPushButton::clicked,this,[=](){qDebug()<<m;});qDebug() << m;

案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton * btnClose = new QPushButton;btnClose->setText("close");btnClose->move(100,0);btnClose->setParent(this);connect(btnClose,&QPushButton::clicked,this,[=](){btnClose->setText("关闭");emit te->hungry("娃哈哈");
//        this->close();});

打开关闭窗口案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 窗口QWidget *myWidget = new QWidget;myWidget->resize(200,200);QPushButton *btnOpen = new QPushButton("打开",this);this->resize(600,400);connect(btnOpen,&QPushButton::clicked,this,[=](){myWidget->show();});QPushButton *btnclose = new QPushButton("关闭",this);btnclose->move(200,0);connect(btnclose,&QPushButton::clicked,this,[=](){myWidget->close();});// 一个按钮控制两个窗口QWidget *myWidget1 = new QWidget;myWidget1->resize(300,100);QPushButton *myBtn = new QPushButton("open",this);myBtn->move(50,50);connect(myBtn,&QPushButton::clicked,this,[=](){if(myBtn->text()=="open"){myBtn->setText("close");myWidget1->show();}else {myBtn->setText("open");myWidget1->close();}});}Widget::~Widget()
{delete ui;
}

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

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

相关文章

window下载安装clang

执行clang报错&#xff1a; c:/>clang test.cclang: warning: unable to find a Visual Studio installation; try running Clang from a developer command prompt [-Wmsvc-not-found] clang: error: unable to execute command: program not executable clang: error: li…

数据隐私: 什么是数据隐私以及如何保护数据安全?

什么是数据隐私&#xff1f; 数据隐私&#xff08;或信息隐私&#xff09;是数据保护的一个领域。它指的是个人可以决定何时、如何以及在多大程度上与他人分享或交换他们的个人数据。 换句话说&#xff0c;数据隐私围绕着用户的个人数据如何被收集、存储、管理和与第三方共享…

Win-ARM联盟的端侧AI技术分析

Win-ARM联盟&#xff0c;端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC&#xff0c;搭载全新NPU与重塑的Windows 11系统&#xff0c;纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS&#xff0c;支持语音翻译、实时绘画、文…

NesT : 嵌套层次Transformer

探讨了在不重叠的图像块上嵌套基本局部变换的思想,并以分层的方式对它们进行聚合。发现块聚合功能在实现跨块非局部信息通信中起着至关重要的作用。 这个观察结果引导我们设计一个简化的体系结构,它需要在原始视觉转换器上进行少量的代码更改。所提出的明智选择的设计有三个好…

【Spring Boot 教程:从入门到精通】掌握 Spring Boot 开发技巧与窍门(一)-java语法(1)

一些Java基本语法的基本介绍&#xff0c;语法更新结束会紧跟项目实战&#xff0c;后续会持续在该专栏进行更新&#xff01;&#xff01;&#xff01; 目录 前言 一、基本概念 1.JDK、JRE、JVM的关系&#xff1a; 2.JDK版本选择 3.Java代码的编译运行流程 4.JSE、JEE、J…

SolidWorks滚花螺栓制作-cnblog

目标 规划基准图形 确定尺寸&#xff0c;单位mm 我 对固定好的图形进行旋转 倒角 设置螺纹 注意改变深度为15mm 收尾位置补全 滚花 建立基准面 制作多边形 添加穿透 扫描切除 圆周阵列 成品完成

[AI 快手 LivePortrait] 引领高效肖像动画新时代

快手推出了 LivePortrait&#xff0c;具有拼接和重定向控制的高效肖像动画。 快速开始 下载代码&#xff0c;准备环境 git clone https://github.com/KwaiVGI/LivePortrait cd LivePortrait# create env using conda conda create -n LivePortrait python3.9.18 conda activ…

Data-Juicer:阿里巴巴荣誉出品的大模型数据清洗框架

Diffusion Models专栏文章汇总:入门与实战 前言:如何优雅地进行大规模数据清洗是一门艺术,特别对于大模型,数据的质量是决定模型成功最关键的因素之一。阿里巴巴最近开源了一项专门针对大语言模型和视频生成大模型的数据清洗框架,值得关注! 目录 主要特点 数据处理 分…

移动校园(9):uniapp照片上传,以及从nodejs服务器获取照片

后端&#xff1a; 安装中间件multer,刚好对应前端提交数据 npm install --save multer Multer详解&#xff08;Node.js中间件&#xff09;-CSDN博客 一直这样 又看了二个小时&#xff0c;搜遍全网&#xff0c;改了又改&#xff0c;各种测试&#xff0c;终于让我发现了问题&a…

什么是数据同步服务RSYNC?

大家好呀&#xff01;这里是码农后端。今天来介绍一下数据同步服务RSYNC&#xff0c;作为Linux/Unix系统中远程或本地复制同步&#xff08;复制&#xff09;文件和目录最常用的命令&#xff0c;相比于scp命令&#xff0c;其具有增量备份、数据同步时保持文件的原有属性等优点。…

制作电子名片的小程序系统源码 快速生成电子名片

在当今数字化时代&#xff0c;传统的纸质名片已逐渐被智能电子名片所取代。电子名片小程序作为一种基于微信生态的创新名片交换方式&#xff0c;凭借其便捷性、高效性和环保性&#xff0c;成为了众多商务人士的首选。小编分享一个制作电子名片的小程序系统源码&#xff0c;无忧…

GitHub 站点打不开

遇到的问题 您是否遇到过GitHub网站打不开的情况&#xff0c;正如下图所示&#xff1a; 解决方案 以下是一些常见的解决方案&#xff1a; 1. 检查网络连接 确保你的设备已连接到互联网。尝试访问其他网站&#xff0c;确保不是你的网络问题。 C:\Vinca>ping github.…

Groovy vs Kotlin 在Gradle配置文件中的差异与选择

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

ArkUI开发学习随机——B站视频简介页面,美团购买界面

案例一&#xff1a;B站视频简介页面 代码&#xff1a; build() {Column(){Column(){Stack(){Image($r("app.media.genimpact")).width(200).height(125).borderRadius({topLeft:5,topRight:5})Row(){Image($r("app.media.bz_play")).height(24).fillColor…

【独家揭秘】视频号矩阵系统火爆上线,一键式多平台管理,你的内容营销神器!

在信息爆炸的时代&#xff0c;内容创作者们面临着前所未有的挑战与机遇。如何让自己的内容在众多平台中脱颖而出&#xff0c;快速传播并吸引大量观众&#xff0c;成为了每个创作者关注的焦点。近日&#xff0c;一款名为“迅狐视频号矩阵系统”的神器震撼来袭&#xff0c;它以其…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…

【Python】已解决:SyntaxError invalid syntax

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError invalid syntax 一、分析问题背景 在Python编程中&#xff0c;SyntaxError: invalid syntax是一个常见的错误&#xff0c;它通常表示代码中存在语法…

GLM4大模型微调入门实战-命名实体识别(NER)任务

[GLM4]是清华智谱团队最近开源的大语言模型。 以GLM4作为基座大模型&#xff0c;通过指令微调的方式做高精度的命名实体识别&#xff08;NER&#xff09;&#xff0c;是学习入门LLM微调、建立大模型认知的非常好的任务。 显存要求相对较高&#xff0c;需要40GB左右。 知识点1&…

【Python】已解决:ModuleNotFoundError: No module named ‘pip‘(重新安装pip的两种方式)

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例 四、重新安装pip的两种方式方式一&#xff1a;使用get-pip.py脚本方式二&#xff1a;使用ensurepip模块五、注意事项 已解决&#xff1a;ModuleNotFoundError: No module named ‘pip’&#xff08;重新安装pip的…

30. 01背包问题 二维,01背包问题 一维,416.分割等和子集

背包问题分类&#xff1a; 1、确定dp数组以及下标的含义对于背包问题&#xff0c;有一种写法&#xff0c; 是使用二维数组&#xff0c;即dp[i][j] 表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。2、确定递推公式&#xff0c;…