news 2026/2/12 6:23:39

Qt Creator

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt Creator

一、QT简介

1、Qt是一个1991年由Qt Company开发的 跨平台 C++ 图形用户界面应用程序开发框架。

​ 框架:一堆能够实现特殊功能的类和函数

2、它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。

GUI(Graphical User Interface,中文名:图形用户接口)是指采用图形方式显示的计算机操作用户界面
qt是c++写的

3、Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。

4、Qt包括多达500个以上的C++类,还提供基于模板的collections,serialization,file,I/O device,directory management,date/time类。甚至还包括正则表达式的处理功能

5、编译,可以在不同的系统上运行。

6、Qt包含几种图形界面工具 --了解

Qt Designer:Qt设计器。用来可视化地设计应用程序界面。
Qmake:使用此工具可以由简单的、与平台无关的工程文件(pro文件)来生成编译所需的Makefile。
Qt Assistant:关于Qt的帮助文件。类似于MSDN。可以快速地发现你所需要的帮助。

moc:元对象编译器。
uic:用户界面编译器。在程序编译时被自动调用,通过ui_*.h文件生成应用程序界面。

MinGW:(Minimalist GNU for Windows)是Windows下的一个轻量级开发工具集,通常与Qt一起使用来开发 Windows应用程序。 Windows 中使用的 GCC 编译器 //Qt 中的 gcc 编译器其实是 MinGW 下的编译器

、第一个QT项目

1.创建QT项目

1.打开QTCreator

2.Application--->QT Widgets Application--->choose

3.名称:项目名(不能有中文和特殊字符)--->创建路径:项目保存位置--->下一步

4.选择构建套件(默认)--->下一步

5.类信息

5.1基类:QMainWindow窗口类(选择),QDialog对话框类,QWidget控件类

5.2界面文件勾选,创建ui文件,可视化设计界面

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

2.查看编码

保证 QT的文件能在Windows 和Linux下都能正常打开,以及避免由于Windows下和Linux下编码不同而产生的中文字符乱码的问题,需统一代码中的字符编码。为了达到这个目的,需设置 QtCreator的默认
编码为UTF-8

3.查看qt版本

4.查看使用的编译器

5.Qt Creator生成和运行程序

绿箭头: 编译并运行
小锤子: 编译不运行,执行makefile文件
锤子上的绿箭头(有小虫子的绿箭头):编译调试debug
从编译生成到运行,不需要自己敲命令,一个按钮搞定,这就是集成开发环境的好处

项目右键,执行qmake: 叫做构建项目,会生成makefile文件;

6.项目介绍

1、pro文件

1)pro文件:通常我们视他为qt项目的配置文件
//.pro文件 QT += core gui//项目指定的模块 core 核心模块 提供非图形类 gui 图形界面类 network 网络 模块 sq] 数据库模块 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #组件模块 //条件语句:检査当前的Qt主版本是否大于4 //在 Qt5 及以后的版本引入了新的小部件(widgets)特性,widgets 模块包含了用于创建经典的桌面 GUI 应用程序的类,例如 Qwidget、QPushButton 等。如果Qt的主版本号大于4,那么会将 widgets 模块添加 到项目中。使用这种条件语句可以确保代码的兼容性,在不同的 Qt 版本下使用相应的模块 CONFIG += c++11 //配置项目使用 C++11 标准进行编译。这允许使用 C++11 中的新特性 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS //QT_DEPRECATED_WARNINGS 宏,当使用已被标记为弃用的 Qt 特性时,编译器会发出相应的警告。这有助 于开发者了解使用了过时的 API,并促使其将代码更新到新的 API 上,以保证代码的可维护性和未来的兼容 性。 # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 //这是一个注释掉的配置。如果取消注释,将禁止使用 Qt6.0.0 之前的所有已弃用的 API,任何使用这些 API 的代码将无法编译,强制开发者使用最新的 API,保证代码的质量和与最新 Qt 版本的兼容性 SOURCES += \ main.cpp \ mainwindow.cpp //工程中包含的源文件 HEADERS += \ mainwindow.h //工程中包含的头文件 FORMS += \ mainwindow.ui //工程中包含的界面文件 # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin //对于 QNX 操作系统,设置了目标文件的部署路径为 /tmp/$${TARGET}/bin。$${TARGET} 是一个变量, 会在构建时被替换为目标名称。 //与 Linux 相比,QNX 的实时性更强。Linux 虽然也可以用于一些实时性要求不是特别高的工业控制等场 景,但在对时间要求极为严格的应用中,QNX的性能优势更加明显。例如,在某些需要微秒级响应的工业自动 化任务中,QNX 能够更好地满足要求。 //与 windows 相比,QNX 更加专注于嵌入式和实时应用。windows 主要用于桌面计算机和服务器等领域, 而 QNX 的优势在于能够在资源有限的嵌入式设备中高效运行,并且提供可靠的实时服务 else: unix:!android: target.path = /opt/$${TARGET}/bin //对于其他的 Unix 系统(除了 Android),将目标文件部署到 /opt/$${TARGET}/bin 路径 !isEmpty(target.path): INSTALLS += target //如果 target.path 不为空,将 target 加入到 INSTALLS 列表中。这意味着在构建时,生成的可执行文 件会被安装到 target.path 所指定的路径,确保部署过程的正确执行
2)main函数

包含main函数,定义应用程序的对象和主窗体对象

显示主窗体

程序运行

2、文件介绍

#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { //QApplication qt的应用对象,必须创建QApplication对象,否则是不存在应用的 QApplication a(argc, argv); //创建我们自己定义的第一个窗口的对象 MainWindow w; //显示这个窗口对象 w.show(); //执行这个QApplication对象,应用对象执行完毕,main才执行完毕 return a.exec(); //1.启动事件循环:exec() 方法启动 Qt 的事件循环,开始处理用户输入、窗口系统事件、定时器事件等 //2.阻塞执行:调用 exec() 后,程序会阻塞在这里,直到事件循环结束 //3.返回值:返回一个整数值,通常用作程序的退出代码 作为main函数的返回值 }

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> //声明Ui::MainWindow类 namespace Ui { class MainWindow; } //QT没有命名空间,虽然没有命名空间,但是QT所有的定义前面都有Q,所以我们在Qt开发时,定义的标识符前面不要以Q开头 //我们自己定义的MainWindow类继承了QT的QMainWindow类,所以MainWindow类具备了窗口的所以属性。 //在框架中开发时,我们经常会继承框架中类,然后添加自己需要的功能。 class MainWindow : public QMainWindow { //QT中的大部分类都具备元对象属性,(元对象就是具备QT中的特殊属性的类) //只要我们定义的类继承了具备元对象属性的QT的类,就得在类的私有访问权限中写Q_OBJECT宏。 //我们怎么知道一个类是否具备元对象属性呢?查看这个类的基类中有没有QObject类。如果有,就具备元对象属性。 Q_OBJECT public: //explicit避免隐式转换 /* QT的内存管理机制: 把所有的对象构建成一颗树形结构,当树的很节点被释放时,会把它素所有的子节点都释放。 如果一个对象不指定父节点,那么它的释放将有我们通过代码来实现。 一般情况下都用主窗口作为根节点。 这里的参数是QWidget类型,说明想作为MainWindow的父节点,需要派生自QWidget的类对象。 QWidget 控件 在屏幕上能看到的东西都叫控件 */ MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: //Ui::MainWindow不是我们定义的class MainWindow类 //Ui::MainWindow是QT根据MainWindow.ui文件,自动生成的类。使用的工具叫QTDesigner。 Ui::MainWindow* ui;//ui指针将指向界面文件对象 }; #endif // MAINWINDOW_H
#include "MainWindow.h" #include "ui_MainWindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),//初始化父类 ui(new Ui::MainWindow)//创建一个界面文件的对象 { //创建界面文件对象中所有的控件对象 ui->setupUi(this); } MainWindow::~MainWindow() { delete ui;//释放界面文件对象 }

三、基础控件

什么叫控件?在屏幕上能看到的东西都叫控件。这个定义并不是很准确,为了建立第一印象。

1.QLabel-标签

可以在窗口中显示文字和图片的控件

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),//初始化父类 ui(new Ui::MainWindow)//创建一个界面文件的对象 { //创建界面文件对象中所有的控件对象 ui->setupUi(this); //我们想对控件进行任何操作,一定是在ui->setupUi(this);这一行执行完毕之后。 //所有的界面文件中的控件,都是ui的成员变量,变量名就是控件名 ui->label->setText("hello world!");//设置label显示的文本 }

2.QLineEdit-单行输入框

编辑一行文本的控件

输入框的暗文显示。

输入框的提示字。

输入框的最大长度。

3.QPushButton-按钮

4.布局

控件在布局中,尺寸由布局自动控制,我们可以通过设置控件的最大最小尺寸来限制布局对控件尺寸的自动分配。

1)线性布局

把控件排成一条横线或者一条竖线

水平布局 horizontalLayout

垂直布局 verticalLayout

2)网格布局

横纵都有的排列

布局是可以嵌套的。

设置控件在布局中的最大和最小的尺寸,限制布局对控件自动调整。

常见错误:

error: cannot open output file debug\test1007.exe: Permission denied

这个错误是因为之前运行过一个窗口,在第二次运行之前修改代码了。此时需要关闭第一个窗口。

练习1:

项目中,最好给整个窗口先设置一个布局。

做出登录界面(和注册界面的UI文件)。

输入框灰字属性

placeholderText

输入框暗文属性

echoMode (password)

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //设置提示字 ui->lineEdit_account->setPlaceholderText("请输入账号"); ui->lineEdit_password->setPlaceholderText("请输入密码"); //设置密码圆点 ui->lineEdit_password->setEchoMode(QLineEdit::Password); }

四、信号与槽

1.作用

是QT提供的一种解耦的机制。QT希望控件之间是相互独立的,这样才更有利于功能的扩展。

耦:耦合,模块之间的关系,模块之间的相互调用;

耦合性高不好,又不可能不耦合。

信号与槽底层基于:观察者模式 (降低耦合性)

2.原理

3.使用示例

信号和槽机制是qt的核心机制

当一个对象的状态发生变化时,通过信号的方式通知其他对象,其他对象通过执行相应的槽函数来响应该信号。

信号与槽是QT提供的任意两个(QObject)对象之间的通信机制,常用来完成界面操作的响应。

定义槽函数

槽是一个函数,普通函数可以怎么用,槽函数也可以怎么用。

在访问权限的后面加上slots关键字,slots是QT专有的关键字,不是C++语法。slots修饰的就是槽函数。

例如:当我们点击QPushButton的时候,QPushButton就会发出一个信号。我们需要定义一个槽来接收一个信号,在槽中编写按钮要触发的逻辑。

public slots://槽函数 void slot_btn(); void MainWindow::slot_btn() { //修改文本内容 ui->label_hello->setText("hello"); } //连接 connect(ui->pushButton_click,//信号的发送者 &QPushButton::clicked,//信号-》一种动作标志或者请求 this,//信号的接收者 &MainWindow::slot_btn);//响应的槽函数

连接信号与槽

connect( );//负责将信号与槽连接起来 参数1:发出信号的对象 参数2:信号 QPushButton点击是会发出clicked信号 参数3:接收信号的对象 参数4:槽 参数5:处理模式:默认为自动连接(一般不用,默认参数)

有关多线程的参数,暂时使用默认实参的就可以

enum ConnectionType { AutoConnection,//自动连接 DirectConnection,//直接连接 QueuedConnection,//队列连接 BlockingQueuedConnection,//阻塞队列连接 UniqueConnection = 0x80//唯一链接 };
1.参数解析:
  • 提取发送者(sender)、信号(signal)、接收者(receiver)、槽(slot)、连接类型(默认Qt::AutoConnection

  • 对旧语法(SIGNAL/SLOT宏),将信号 / 槽名转换为元对象索引(通过QMetaObject::indexOfSignal/Slot);新语法直接使用函数指针,无需字符串解析。

2.连接存储:
  • 发送者(sender)维护一个连接映射表(如QObjectPrivate::ConnectionList),保存信号索引到接收者及槽的关联(多对多关系,支持一个信号连接多个槽)。

  • 每个连接记录:接收者指针、槽的元方法(QMetaMethod)、连接类型(用于线程调度)。

3.线程调度逻辑(根据连接类型)
  • Qt::DirectConnection: 信号发射时立即同步调用槽(同线程内直接执行,跨线程可能引发线程安全问题,如 UI 线程直接操作工作线程对象)。

  • Qt::QueuedConnection: 将槽调用包装为事件(QMetaCallEvent,投递到接收者所在线程的事件循环,异步执行(跨线程安全,通过事件队列序列化调用)。

  • Qt::AutoConnection: 自动判断线程:同线程则用Direct,异线程则用Queued,是默认且最常用的连接类型。

  • Qt::BlockingQueuedConnection: 类似Queued,但发送者线程阻塞直至槽执行完毕(需确保发送者与接收者不在同一线程,否则死锁)。

4.唯一性检查(Qt::UniqueConnection

  • 若设置该标志,connect会先检查是否已存在相同的信号 - 槽连接(基于发送者、信号、接收者、槽的唯一性),避免重复连接。

4.Lambda表达式

信号与槽的连接方式,三种方式:

demo、

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 传统Qt是连接方式 // 传统Qt4连接方式为 信号发送者,信号,信号接受者,处理函数 connect(ui->pushButton_qt4,SIGNAL(clicked()),this,SLOT(qT4_slot())); //Qt5连接方式 //其实这么写的方式和Qt4没有啥却别,只是在Qt4 中引用了信号槽,在简单的使用时没有问题, //但是在庞大的工程中,信号和槽仅仅是宏替换,在编译的时候没有安全监测 //Qt5的新方法,在编译的时候就会有监测,如果我们手误操作失误,就会出现问题 connect(ui>pushButton_qt5,&QPushButton::clicked,this,&MainWindow::qT5_slot); //Qt5 Lambda表达式 //这里需要注意 Lambda表达式是C++11 的内容,所以,需要再Pro项目文件中加入 CONFIG += C++11 connect(ui->pushButton_lambda,&QPushButton::clicked, [this](){ //qDebug()<<"lambda 表达式"; ui->pushButton_lambda->setText("lambda 表达式"); }); } void MainWindow::slot_qt4() { ui->label->setText("qt4"); } void MainWindow::slot_qt5() { ui->label->setText("qt5"); } MainWindow::~MainWindow() { delete ui; }

(一)传统Qt是连接方式

// 传统Qt4连接方式为 信号发送者,信号,信号接受者,处理函数 connect(ui->pushButton_qt4,SIGNAL(clicked(bool)), this,SLOT(qT4_slot()));

(二)Qt5连接方式

/*其实这么写的方式和Qt4没有啥区别,只是在Qt4 中引用了信号槽, 在简单的使用时没有问题,但是在庞大的工程中,信号和槽仅仅是宏替换,在编译的时候没有安全监测; Qt5的新方法,在编译的时候就会有监测,如果我们手误操作失误,就会出现问题*/ connect(ui->pushButton_qt5,&QPushButton::clicked, this,&MainWindow::qT5_slot);

(三)Qt5 Lambda表达式

注意: Lambda表达式是C++ 11 的内容,所以,需要再Pro项目文件中加入 CONFIG += C++11 connect(ui->pushButton_lambda,&QPushButton::clicked, [=]( ) { qDebug()<<"Lambad"; } ); [],标识一个Lambda的开始,这部分必须存在。函数对象参数时传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用到哪些定义到Lambda前,Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。 函数对象参数有以下形式: 空。没有使用任何函数对象参数; =。函数体内可以使用Lambda所在作用范围内所有可见的局部变量,是值传递的方式。 &。函数体内可以使用Lambda所在作用范围内所有可见的局部变量,是以引用传递方式。 this。函数体内可以使用Lambda所在类中的成员变量,以值传递方式。 connect(ui->pushButton_lambda,&QPushButton::clicked, [this](){ //qDebug()<<"lambda 表达式"; ui->label->setText("lambda 表达式"); });

练习2:定义两个label,点击按钮,一个显示hello ,一个显示world -->两个槽函数

(两个connect)

练习2.2:实现灯 1)开关功能,一个按钮,文字显示 on/off 一个label显示 :灯:开/关 ,

​ 点击一次按钮,label切换显示 灯:开 和 灯:关

bool flag;按钮的显示: on off

练习2.3:记录按钮的点击次数,从0开始,点一次,增加一次

label显示整数

ui->label->setNum(1);

5. 获取当前发送信号的对象

两个按钮,对应一个标签label;

点击第一个按钮,显示hello

点击第二个按钮,标签显示world

只写一个槽函数

QObject * sender = QObject::sender();

示例:

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //连接 connect(ui->pushButton_hello, &QPushButton::clicked, this, &MainWindow::slot_sender); connect(ui->pushButton_world, &QPushButton::clicked, this, &MainWindow::slot_sender); } MainWindow::~MainWindow() { delete ui; } void MainWindow::slot_sender() { //获取当前发送信号得对象 QObject* obj = QObject::sender(); //判断是哪个按钮 if(obj == ui->pushButton_hello) { ui->label->setText("hello"); } else if(obj == ui->pushButton_world) { ui->label->setText("world"); } }

6.QObject

QObject类:

​ 1)是所有qt类的基类,父类
​ 2)实现了信号与槽的机制
​ 3)提供了处理机制(父子对象的内存管理机制)

每一个对象都有一个父对象,由父对象来负责子对象的内存管理。

它的最主要特征是关于对象间无缝通信的机制:信号与槽

6.1 QObject 内存管理机制

1. 以对象树的形式组织起来

当为一个对象创建子对象时,子对象会自动地添加到父对象的children()列表中

父对象拥有子对象的所有权,比如父对象可以在自己的析构函数中删除它的孩子对象

6.2QT项目中使用的类基本分为两种

一种为自定义的C++的类, 另一种则为QObject类。

6.3获取谁在发送信号

QObject* s = QObject::sender();

6.4Qt内存回收机制总结

1)当一个QObject对象在堆上创建的时候,Qt 会同时为其创建一个对象树(里面对象无顺序)
2)任何对象树中的 QObject对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的
children列表中删除;如果有孩子,则自动 delete 每一个孩子。
3)Qt 保证没有QObject会被 delete 两次
4)在 Qt 中,尽量在构造的时候就指定 parent 对象,并且大胆在堆上创建

五、QString类

输出调试信息 (使用QDebug类)

包含头文件:

#include <QDebug>

说明:想使用printf一样使用,qDebug函数输出调试信息

#include <QDebug> int conter = 9; qDebug("connect ok %d\n",conter);

像使用cout一样使用输出调试信息

#include <QDebug> qDebug()<<"hello";

1.拼接

//1.字符串拼接 定义字符串用QString QString s1 QString s1 = "hello"; QString s2 = " world"; s1+=s2;

2.追加 append

s1.append(" hey"); qDebug()<<s1;

3.判断字符串是否为空

QString s ; s.isEmpty(); 示例: if(!s.isEmpty()) { s.append('0'); ui->label_choose->setText(s); }

4.字符串清空 s.clear()

s1.clear(); qDebug()<<s1;

5.格式化

char buf[100]; sprintf(buf,"%s %d","哈哈",100); //替换 1替换成第一个arg中的参数 2替换第二个arg中的参数 s1 = QString("%1 was born in %2").arg("小明").arg(1900);

6.数字转字符串

QString s = QString().setNum(16); //QString s = QString::number(num); QString s1 = QString("%1").arg(16);

7.字符串转换

toInt() toDouble() toFloat() toLong() toLongLong()

QString s5 = "123"; bool ok; int n = s5.toInt(&ok,10); if(ok) { qDebug()<<n; } QString s6 = "7b"; bool ok; int hex = s6.toInt(&ok,16);//转换成十六进制 if(ok)//转换是否成功 转换成功 返回值为true { qDebug()<<hex; } int dec = s6.toInt(&ok);//参数2位默认10进制 qDebug()<<dec;

8.比较 > < >= <= ==

QString s7 = "hello"; QString s8 = "helo"; if(s7 > s8) qDebug()<<"s7>s8"; else qDebug()<<"not";

示例:

#include <QCoreApplication> //调试信息类 #include <QDebug> #include <string> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //1.创建字符串 QString str = "hello"; qDebug()<<str; //2.拼接字符串 QString str2 = "world"; //成员函数:append 运算符重载 += str.append(str2); qDebug()<<str;//helloworld str += str2; qDebug()<<str;//helloworldworld //3.清空字符串 str.clear(); qDebug()<<str; //4.判断字符串是否为空 if(str.isEmpty()) { qDebug()<<"请输入账号"; } //5.格式化字符串 int num = 100; QString str3 = "study"; //替换 第一个arg中的值 替换到 %1 study 100 QString str4 = QString("id:%1 name: %2").arg(str3).arg(num); qDebug()<<str4;//id:study name: 100 //6.字符串 转成数字 QString str5 = "123"; // 123 bool ok; int res = str5.toInt(&ok,16); if(ok)//转换成功 qDebug()<<res; //7.数字转 字符串 "100" //方式1: QString str6 = QString("%1").arg(num); qDebug()<<str6;//"100" //方式2:静态方法 str6 = QString::number(num); qDebug()<<str6;//"100" //方式3:成员函数 str6 = QString().setNum(100); qDebug()<<str6;//"100" //8.字符串比较 < > == <= != QString name = "admin"; QString userName = "tom"; if(name == userName) qDebug()<<"登录成功"; else qDebug()<<"登录失败"; return a.exec(); }

练习3:

给登录界面中的登录按钮添加信号与槽,点击按钮实现输出相应的内容。

设计登录界面,密码设定为密文最大六位,输入用户名和密码后点击登录按钮,

将输入的内容与程序预留的用户名(admin)和密码(123456)比对,在当前界面使用Label显示登录结果。

ui->lineEdit->setMaxLength(6); //获取输入得内容 ui->lineEdit->text(); qDebug()<<”登录失败”;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/12 5:10:16

Wan2.2-T2V-A14B模型推理性能调优实战技巧分享

Wan2.2-T2V-A14B模型推理性能调优实战技巧分享 在AI生成内容&#xff08;AIGC&#xff09;浪潮席卷影视、广告和短视频行业的今天&#xff0c;文本到视频&#xff08;Text-to-Video, T2V&#xff09;技术正从实验室原型快速走向商业化落地。相比图像生成&#xff0c;T2V不仅要处…

作者头像 李华
网站建设 2026/2/6 16:17:56

GraniStudio零代码平台调试算子方式有多少种?分别都是如何调试?

GraniStudio零代码平台,分为主动执行和被动执行,执行模式分为 DuBug模式和Release 模式。 可在快捷菜单栏设置调试模式,默认&#xff1a;Debug模式 主动执行 流程配置窗口 主动执行开关打开,将设置为主动执行。 被动执行 流程配置窗口 主动执行开关关闭,将设置为被动执行。 …

作者头像 李华
网站建设 2026/2/6 16:25:26

小米14C刷国际版步骤

​​​​​​https://xiaomirom.com/rom/redmi-14r-5g-poco-m7-5g-14c-5g-flame-india-fastboot-recovery-rom/ 小米14C的价格比较合适。可以买了 6125G的套餐差不多518元。再刷个全球版的ROM。 方便调用和测试。 下载ROM。 https://xiaomirom.com/download-xiaomi-flash-t…

作者头像 李华
网站建设 2026/2/11 15:17:45

智谱开源天团登陆 AtomGit,4 大模型覆盖多模态全场景!

智谱 AI 4 款多模态核心模型在 AtomGit 平台集中开源&#xff01;基于 Open-AutoGLM 、GLM-4.6V、GLM-ASR-Nano-2512、GLM-TTS 组成的模型矩阵&#xff0c;构建起 “手机操作 视觉理解 语音识别 文本转语音”的全链路多模态 AI 生态。这次开源不仅打破 “AI 只停留在聊天框”…

作者头像 李华
网站建设 2026/2/9 4:44:08

开源视频生成技术再突破:Wan2.1-FLF2V-14B模型实现720P高清流畅过渡

在人工智能生成内容&#xff08;AIGC&#xff09;领域&#xff0c;视频生成技术正经历着前所未有的快速发展。其中&#xff0c;首尾帧驱动的视频生成技术因其高效性和易用性&#xff0c;逐渐成为内容创作领域的新宠。近日&#xff0c;Wan团队正式发布了旗下最新力作——Wan2.1-…

作者头像 李华
网站建设 2026/2/11 15:00:16

教学辅助微信小程序设计毕业设计(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌ 专注于VUE,小程序&#xff0c;安卓&#xff0c;Java,python,物联网专业&#xff0c;有18年开发经验&#xff0c;长年从事毕业指导&#xff0c;项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、…

作者头像 李华