Qt Creator 从入门到项目实战

Qt Creator 简介

Qt Creator 是一个跨平台的集成开发环境(IDE),专门用于开发 Qt 应用程序。它为开发者提供了一个强大的工具集,包括代码编辑器、调试器、UI 设计器以及性能分析工具等。

1.1 Qt Creator 的安装

Qt Creator 支持多种操作系统,包括 Windows、macOS 和 Linux。下面是在 Ubuntu 系统上安装 Qt Creator 的命令示例:

sudo apt-get update
sudo apt-get install qtcreator

1.2 Qt Creator 的功能特点

Qt Creator 拥有以下几个主要功能特点:

  • 代码编辑器:支持语法高亮、代码折叠、代码自动完成等功能。
  • 集成调试器:可以方便地进行断点调试、步进代码等调试操作。
  • UI 设计器:提供了一个可视化界面来设计用户界面。
  • 版本控制:支持 Git 等版本控制系统,方便代码管理和协作。
  • 构建系统:集成了 qmake 和 CMake 构建系统,支持构建和部署 Qt 应用程序。

2. 安装与配置

在开始使用 Qt Creator 之前,需要确保正确安装并配置了开发环境。

2.1 安装 Qt Creator

根据不同的操作系统,安装 Qt Creator 的步骤会有所不同。以下是在 Windows 系统上安装 Qt Creator 的简要步骤:

  1. 下载 Qt Creator 的安装包。
  2. 运行安装程序并遵循提示完成安装。

对于 macOS 和 Linux 系统,安装步骤类似,但可能需要通过包管理器或直接从 Qt 官方网站下载安装包。

2.2 配置 Qt Creator

安装完成后,需要对 Qt Creator 进行一些基本配置:

2.2.1 设置 Kit

Kit 是 Qt Creator 中的一个概念,它定义了构建和运行应用程序所需的环境配置。

  • 打开 Qt Creator。
  • 转到 “工具”>“选项”>“构建和运行”>“ Kits”。
  • 根据你的开发环境,配置或创建一个新的 Kit。
2.2.2 配置编译器

确保 Qt Creator 知道你的编译器的位置:

  • 在 “工具”>“选项”>“构建和运行”>“编译器” 中,添加你的编译器路径。
2.2.3 配置代码风格

为了保持代码的一致性,可以设置代码风格:

  • 在 “工具”>“选项”>“代码风格” 中,选择或自定义代码风格设置。
// 示例:Qt Creator代码风格配置
// 此部分不需要实际代码,仅作为配置过程的说明
// 在Qt Creator的选项中设置代码缩进、空格、换行等风格

完成以上步骤后,Qt Creator 应该已经准备好用于开发 Qt 应用程序了。

3. 基础界面与功能介绍

Qt Creator 提供了一个直观的用户界面,其中包含了多种功能,以帮助开发者更高效地进行软件开发。

3.1 主界面布局

Qt Creator 的主界面通常包括以下几个主要区域:

  • 菜单栏:提供对 Qt Creator 所有功能的访问。
  • 工具栏:提供快速访问常用功能的按钮。
  • 编辑器区域:这是编写代码的地方,可以打开多个文件。
  • 输出窗口:显示构建、运行和调试信息。
  • 侧边栏:包含项目浏览器、类视图、文件浏览器等。

3.2 功能介绍

以下是一些 Qt Creator 的关键功能:

3.2.1 代码编辑器

代码编辑器支持多种编程语言的语法高亮,包括 C++、JavaScript 和 QML。它还提供以下特性:

  • 代码自动完成:根据上下文提供代码补全建议。
  • 代码折叠:允许折叠代码块以提高代码的可读性。
  • 代码分析:静态分析代码,提供潜在问题的警告和提示。
// 示例:代码编辑器中的语法高亮和代码折叠
// 以下代码在Qt Creator中会显示语法高亮
int main() {// ...
}
3.2.2 调试器

Qt Creator 集成了一个功能强大的调试器,支持断点、单步执行、查看变量值等功能。

// 示例:设置断点的代码
int main() {int value = 0; // 在这里设置断点// ...
}
3.2.3 UI 设计器

Qt Creator 的 UI 设计器允许开发者使用拖放的方式来设计用户界面。

// 示例:UI设计器中设计的简单界面
// 以下代码由UI设计器生成
QWidget *window = new QWidget();
QPushButton *button = new QPushButton("Click me", window);
button->setGeometry(50, 50, 100, 30);
window->show();
3.2.4 版本控制

Qt Creator 支持与 Git 等版本控制系统的集成,允许开发者进行提交、拉取、推送等操作。

# 示例:在Qt Creator中使用Git命令
git status  # 查看当前版本控制状态
git commit -m "Initial commit"  # 提交更改
git push origin master  # 推送到远程仓库

通过熟悉这些基础界面和功能,开发者可以开始使用 Qt Creator 进行 Qt 应用程序的开发。

4. 创建第一个 Qt 项目

使用 Qt Creator 创建一个新项目是开始开发 Qt 应用程序的第一步。

4.1 新建项目

  1. 打开 Qt Creator。
  2. 点击 “新建项目” 按钮或选择 “文件”>“新建文件或项目”。
  3. 在弹出的 “新建” 对话框中,选择 “应用程序” 并点击 “选择”。
  4. 根据需要选择应用程序类型,例如 “Qt Widgets 应用程序”。
  5. 点击 “继续” 并按照向导提示填写项目名称和保存位置。
  6. 配置项目细节,如选择 Qt 版本和构建套件。
  7. 完成向导,Qt Creator 将创建项目并打开编辑器。

4.2 项目结构

创建项目后,Qt Creator 会生成以下基本项目结构:

  • .pro 文件:项目文件,包含项目配置信息。
  • main.cpp:包含应用程序入口点的源文件。
  • mainwindow.ui:主窗口的 UI 设计文件(如果选择了创建 UI)。

4.3 编写代码

在 main.cpp 文件中,你将找到以下代码:

#include <QApplication>
#include "mainwindow.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.show();return app.exec();
}

这段代码创建了一个 QApplication 实例,它是管理 GUI 应用程序的控制流和主要设置的对象。然后创建了一个 MainWindow 实例,并将其显示出来。

4.4 构建和运行

构建和运行项目:

  1. 点击工具栏上的 “构建和运行” 按钮。
  2. Qt Creator 将编译项目并启动应用程序。

如果一切顺利,你应该能看到一个简单的窗口,这是你的第一个 Qt 应用程序。

// 示例:main.cpp中的代码
#include <QApplication>
#include "mainwindow.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.show();return app.exec();
}

通过完成这些步骤,你已经成功创建了第一个 Qt 项目,并运行了一个基本的应用程序。接下来,你可以开始添加控件和功能,以扩展你的应用程序。

5. Qt 信号与槽机制

Qt 的信号与槽机制是 Qt 框架的核心特性之一,它是一种强大的事件通信机制,用于对象之间的通信。

5.1 信号与槽的概念

在 Qt 中,对象(通常是 QObject 的子类)可以发出信号,并且可以有相应的槽来响应这些信号。信号是对象发出的消息,表明发生了一个特定的事件;槽是对象中的函数,可以被用来响应特定信号。

5.2 定义信号与槽

信号和槽在 QObject 的子类中使用 signal 和 slot 关键字来定义。

// 示例:定义信号和槽
class Communicate : public QObject {Q_OBJECTpublic:Communicate(QObject *parent = nullptr) : QObject(parent) {}signals:void speak(const QString &words);public slots:void onSpeak(const QString &words) {qDebug() << "Heard:" << words;}
};

5.3 连接信号与槽

要使信号能够触发槽,必须使用 connect() 函数将它们连接起来。

// 示例:连接信号和槽
Communicate comm;
QObject::connect(&comm, &Communicate::speak, &comm, &Communicate::onSpeak);comm.speak("Hello, world!");

在上面的代码中,当 speak 信号被发出时,onSpeak 槽将被调用。

5.4 信号与槽的用途

信号与槽机制常用于以下场景:

  • 用户交互:响应用户界面事件,如按钮点击。
  • 对象间的通信:一个对象的状态改变时通知其他对象。
  • 异步操作:在后台线程完成任务后通知主线程。

5.5 注意事项

  • 信号和槽可以是任何返回类型,但槽可以是信号返回类型的子类。
  • 信号可以带有参数,槽必须接受相同数量和类型的参数。
  • 一个信号可以连接到多个槽,而一个槽也可以连接到多个信号。
  • 使用 disconnect() 函数可以断开信号与槽的连接。

通过掌握 Qt 的信号与槽机制,开发者可以创建出响应性强且易于维护的 GUI 应用程序。

6. 常用 Qt 控件介绍

Qt 提供了一套丰富的控件库,用于构建图形用户界面(GUI)。以下是一些常用的 Qt 控件及其用途的介绍。

6.1 QPushButton

QPushButton 是用于点击操作的按钮控件。

QPushButton button("Click me");
button.show();

6.2 QLabel

QLabel 用于显示文本、图片或其它内容。

QLabel label("This is a label");
label.show();

6.3 QLineEdit

QLineEdit 是一个单行文本编辑控件。

QLineEdit lineEdit;
lineEdit.show();

6.4 QComboBox

QComboBox 提供了一个下拉列表,用户可以从中选择一个选项。

QComboBox comboBox;
comboBox.addItem("Option 1");
comboBox.addItem("Option 2");
comboBox.addItem("Option 3");
comboBox.show();

6.5 QCheckBox

QCheckBox 是一个复选框,用于在两个状态之间切换。

QCheckBox checkBox("Check me");
checkBox.show();

6.6 QRadioButton

QRadioButton 是单选按钮,用于在一组选项中选择一个。

QRadioButton radioButton1("Option 1");
QRadioButton radioButton2("Option 2");
radioButton1.show();
radioButton2.show();

6.7 QSlider

QSlider 提供了一个滑动条,用户可以通过拖动滑块来设置值。

QSlider slider(Qt::Horizontal);
slider.show();

6.8 QSpinBox

QSpinBox 提供了一个用于输入整数值的控件,通常与 QSlider 配合使用。

QSpinBox spinBox;
spinBox.show();

6.9 QProgressBar

QProgressBar 显示一个进度条,通常用于指示长时间操作的进度。

QProgressBar progressBar;
progressBar.show();

6.10 QTableView

QTableView 用于显示表格数据。

QTableView tableView;
tableView.show();

6.11 QTabWidget

QTabWidget 提供了一个选项卡式的界面,每个选项卡可以包含不同的控件。

QTabWidget tabWidget;
QWidget *tab1 = new QWidget();
QWidget *tab2 = new QWidget();
tabWidget.addTab(tab1, "Tab 1");
tabWidget.addTab(tab2, "Tab 2");
tabWidget.show();

这些控件可以组合起来创建复杂的应用程序界面。Qt 还提供了许多其他的控件和布局管理器,可以帮助开发者设计出既美观又易用的用户界面。

7. 布局管理

布局管理是 Qt 中用于排列窗口内控件的一种机制,它确保了应用程序的用户界面在不同大小和分辨率的屏幕上都能保持良好的布局。

7.1 布局类型

Qt 提供了多种布局类型,以下是一些常用的布局:

  • QHBoxLayout:水平布局,控件从左到右排列。
  • QVBoxLayout:垂直布局,控件从上到下排列。
  • QGridLayout:网格布局,控件排列在一个二维网格中。
  • QStackedLayout:堆叠布局,一次只显示一个控件。

7.2 使用布局

以下是如何使用布局的示例:

// 创建一个窗口
QWidget window;// 创建一个水平布局
QHBoxLayout *layout = new QHBoxLayout;// 创建两个按钮并添加到布局中
QPushButton *button1 = new QPushButton("Button 1");
QPushButton *button2 = new QPushButton("Button 2");
layout->addWidget(button1);
layout->addWidget(button2);// 设置窗口的布局
window.setLayout(layout);// 显示窗口
window.show();

7.3 布局策略

布局管理器会根据以下策略排列控件:

  • 大小提示:控件提供大小提示,布局管理器会尽量满足这些提示。
  • 间隔:布局管理器在控件之间添加间隔,以保持界面美观。
  • 边距:布局管理器在窗口边缘和控件之间添加边距。

7.4 布局嵌套

布局可以嵌套使用,以创建更复杂的布局结构。

// 创建一个主布局
QVBoxLayout *mainLayout = new QVBoxLayout;// 创建一个内部布局并将其添加到主布局中
QHBoxLayout *innerLayout = new QHBoxLayout;
innerLayout->addWidget(new QPushButton("A"));
innerLayout->addWidget(new QPushButton("B"));mainLayout->addLayout(innerLayout);// 添加更多控件到主布局
mainLayout->addWidget(new QPushButton("C"));
mainLayout->addWidget(new QPushButton("D"));// 设置窗口的布局
window.setLayout(mainLayout);

7.5 管理布局大小

可以使用 setSizePolicy() 方法来指定控件如何随窗口大小变化而调整大小。

QPushButton *button = new QPushButton("Big Button");
button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout->addWidget(button);

通过合理使用布局管理器,开发者可以创建出适应性强、易于维护的用户界面。

8. 项目实战:简易计算器开发

在这一章,我们将通过一个简易计算器的开发来实践 Qt 编程。

8.1 设计 UI

首先,我们需要设计计算器的用户界面。这通常涉及以下步骤:

  1. 创建一个新的 Qt Widgets 应用程序项目。
  2. 在项目中添加一个新的 QWidget 或 QMainWindow 作为主窗口。
  3. 使用 Qt Designer 来设计界面,或者手动在代码中创建控件。

以下是一个简单的计算器 UI 设计的代码示例:

// mainwindow.ui 或 mainwindow.h
QWidget *centralWidget = new QWidget(this);
QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);QLineEdit *display = new QLineEdit(centralWidget);
mainLayout->addWidget(display);// 添加按钮
QPushButton *button1 = new QPushButton("1", centralWidget);
QPushButton *button2 = new QPushButton("2", centralWidget);
// ... 添加更多按钮mainLayout->addWidget(button1);
mainLayout->addWidget(button2);
// ... 添加更多按钮到布局setCentralWidget(centralWidget);

8.2 实现逻辑

接下来,我们需要实现计算器的逻辑。这通常包括处理按钮点击事件,执行计算,并将结果显示在显示屏上。

// mainwindow.cpp
class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {// ... UI初始化代码// 连接按钮的点击信号到相应的槽函数connect(button1, &QPushButton::clicked, this, &MainWindow::onNumberClicked);connect(button2, &QPushButton::clicked, this, &MainWindow::onNumberClicked);// ... 连接更多按钮}public slots:void onNumberClicked() {// 获取发送信号的按钮QPushButton *button = qobject_cast<QPushButton *>(sender());if (button) {// 将按钮的文本追加到显示屏上display->insert(button->text());}}// ... 其他槽函数,如处理运算符点击、等号点击等signals:// ... 可以定义一些信号,如果需要的话
};#include "mainwindow.moc"

8.3 处理运算

为了处理计算,我们需要定义一些额外的槽函数来执行加、减、乘、除等运算,并在用户点击等号按钮时显示结果。

public slots:// ... 其他槽函数void onAddClicked() {// 处理加号按钮点击事件}void onEqualClicked() {// 处理等号按钮点击事件,执行计算并显示结果}

8.4 完整示例

以下是一个简易计算器的完整示例,包括加法和等号按钮的处理:

// mainwindow.cpp
// ... 其他代码void MainWindow::onAddClicked() {// 假设我们简单地将当前显示的数字加到之前的数字上// 实际应用中需要更复杂的逻辑来处理多个数字和运算符QString currentText = display->text();bool ok;int currentValue = currentText.toInt(&ok);if (ok) {// 存储当前值以便后续计算m_previousValue = currentValue;// 清空显示屏display->clear();// 设置当前运算符m_currentOperator = '+';}
}void MainWindow::onEqualClicked() {// 执行计算并显示结果QString currentText = display->text();bool ok;int currentValue = currentText.toInt(&ok);if (ok) {int result = 0;switch (m_currentOperator) {case '+':result = m_previousValue + currentValue;break;// ... 处理其他运算符}display->setText(QString::number(result));}
}// ... 其他代码

在这个例子中,我们简单地实现了加法运算,并在用户点击等号时计算并显示结果。实际应用中,计算器的逻辑会更复杂,需要考虑多个数字、多个运算符以及运算的顺序。

通过这个实战项目,我们学习了如何使用 Qt 创建窗口、添加控件、连接信号与槽,以及实现基本的用户交互逻辑。

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

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

相关文章

公司内网远程访问配置教程:本地服务器(和指定端口应用)实现外网连接使用

在数字化时代&#xff0c;企业的办公模式日益多元化&#xff0c;远程办公、跨地区协作等需求不断增加。这使得在公司内网中配置远程访问变得至关重要&#xff0c;它能让员工无论身处何地&#xff0c;只要有网络连接&#xff0c;就能便捷地访问公司内部的各类资源&#xff0c;如…

边缘计算如何重塑能源管理?从技术原理到应用场景全解析

在全球能源数字化转型的浪潮中&#xff0c;一个看似不起眼的设备正在悄悄改变工业能效管理的模式 —— 这就是边缘计算网关。以能源领域为例&#xff0c;传统的 "设备 - 云端" 二层架构正面临数据传输延迟、网络带宽压力大、断网失效等挑战&#xff0c;而边缘计算技术…

自主导航巡检机器人系统解决方案

自主导航巡检机器人系统解决方案 运动性能强大的通用型履带式机器人底盘&#xff0c;整车采用克里斯蒂全独立悬挂设计&#xff0c;内部搭载高扭矩无刷电机&#xff0c;通过精心匹配的底盘高度和功率配置&#xff0c;底盘表现出卓越的通过性能、低重心、平稳运行以及高效的传动效…

Vim 撤销 / 重做 / 操作历史命令汇总

Vim 撤销 / 重做 / 操作历史命令汇总 Vim 提供了丰富的撤销&#xff08;undo&#xff09;、重做&#xff08;redo&#xff09;及查看操作历史的命令&#xff0c;帮助你在编辑过程中灵活地回退或前进到任意修改点。下面按功能分类整理常用命令&#xff0c;便于快速查阅和记忆。…

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…

项目四.高可用集群_ansible

设备准备 安装wordpress [rootlocalhost ~]# nmcli c del "Wired connection 1" [rootlocalhost ~]# nmcli c add type ethernet ifname ens224 con-name ens224 ipv4.method manual ipv4.addr 192.168.88.40/24 gw4 192.168.88.1 autoconnect true [rootlocalhos…

TensorFlow深度学习实战(21)——Transformer架构详解与实现

TensorFlow深度学习实战&#xff08;21&#xff09;——Transformer架构详解与实现 0. 前言1. Transformer 架构1.1 关键思想1.2 计算注意力1.3 编码器-解码器架构1.4 Transformer 架构1.5 模型训练 2. Transformer 类别2.1 解码器(自回归)模型2.2 编码器(自编码)模型2.3 Seq2s…

20250608-在 Windows 上使用 PyCharm 通过 SSH 连接到远程 Ubuntu 机器的 Anaconda 环境

在 Windows 上使用 PyCharm 通过 SSH 连接到远程 Ubuntu 机器的 Anaconda 环境 1. 确保远程机器上的 SSH 服务已启动 在远程 Ubuntu 机器上&#xff0c;确保 SSH 服务已安装并启动&#xff1a; sudo apt-get install openssh-server sudo systemctl start ssh sudo systemct…

Oracle 条件索引 case when 报错解决方案(APP)

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文档用途 本内容介绍 Oracle条件索引 case when 如何在HGDB中转换使用。 详细信息 1、oracle 索引 create unique index I_GL_VOUCHER_7 on gl_vo…

鸿蒙期末总结

一、概念 HarmonyOS应用关键概念&#xff1a;元服务和App的关系 App具有手动下载安装、包大小无限制、应用内或应用市场更新、全量功能等特征&#xff0c;可使用全量API 元服务具有免安装、包大小有限制、即用即走、轻量化等特征&#xff0c;只能使用“元服务API集” 鸿蒙的…

Vue3 + TypeScript + Element Plus 表格行按钮不触发 row-click 事件、不触发勾选行,只执行按钮的 click 事件

点击表格行按钮不触发 row-click 事件、不触发勾选行&#xff0c;只执行按钮的 click 事件 点击第一行的【编辑】&#xff0c;第一行为当前选择行&#xff0c; 同时也勾选了复选框&#xff0c;也会执行 row-click 事件 原来的代码&#xff1a; <el-table-column label"…

SiteAzure4.x 版本 访问html静态页文件出现404错误

问题描述&#xff1a; SiteAzure4.*版本&#xff0c;在upload文件夹中放置了html静态页文件&#xff0c;访问出现404错误 问题分析&#xff1a; 1、确认访问路径是否正确以及文件是否存在 2、确认相应文件夹权限是否正确 3、确认IIS默认文档是否允许静态页&#xff0c;MIM…

[免费]微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端)【论文+源码】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端) 微信小程序毕业设计_哔哩哔哩_bilibili …

强化学习:策略梯度概念

2.策略梯度方法 目标是使策略 不断更新&#xff0c;回报更高。 计算每一个轨迹的回报&#xff0c;和对应的概率 目标是使回报高的轨迹概率应该高。这样整个策略的期望回报也会高。 什么是策略期望回报&#xff1f; 就是用这个策略跑了若干个轨迹&#xff0c;得到回报&#x…

Java 中高级开发岗技能与面试要点梳理

目录 一、核心技术深度掌握 (一)Java 语言高阶特性 JVM 底层原理剖析 并发编程高级应用 Java 新特性实战 (二)主流框架与中间件精通 Spring 生态全面掌控 分布式中间件实战精通 (三)数据库与存储优化专家 SQL 与 ORM 高级应用 分库分表实战 NoSQL 实战(Elas…

职场生存发展指南 | 边界 / 责任 / 社交 / 情绪

注&#xff1a;本文为“职场生存发展”相关合辑。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 职场生存发展指南 | 边界 / 责任 / 社交 / 情绪 职场如江湖&#xff0c;充满机遇与挑战。在单位中立足&#xff0c;需深谙生存智慧——既要守住底线、…

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…

linux中执行脚本命令的source和“.”和“./”的区别

在 Linux 或类 Unix 系统中&#xff0c;source、. 和 ./ 的使用场景各有不同&#xff0c;以下详细介绍何时使用它们&#xff1a; 命令用途适合场景source和“.”等效。脚本在当前 shell 环境中执行并影响当前 shell 的状态和环境变量 1. 加载环境变量配置文件&#xff0c;无需…

games101 hw1

原理 背景 将三维空间中一个旋转的三角形&#xff0c;显示在屏幕上。 假设三角形初始点位为 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形。 mvp AI回答&#xff1a; 在计算机…

Mybatis逆向工程详解(附源码文件)动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…