【Qt】Qt窗口 | QDialog 对话框

news2024/9/23 5:19:00

文章目录

  • 一. 对话框
  • 二. 对话框的分类
    • 1. 非模态对话框
    • 2. 模态对话框
    • 3. 混合属性对话框
  • 三. 自定义对话框
    • 1. 代码实现
    • 2. ui文件实现
  • 四. 内置对话框
    • 1. QMessageBox 消息对话框
    • 2. QColorDialog 颜色对话框
    • 3. QFileDialog 文件对话框
    • 4. QFontDialog 字体对话框
    • 5. QInputDialog 输入对话框

一. 对话框

一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互
Qt 常用的内置对话框有:

  • QMessageBox (消息框)
  • QFileDialog (文件对话框)
  • QInputDialog (输入对话框)
  • QFontDialog (字体对话框)
  • QColorDiaglog (颜色对话框)
    在这里插入图片描述

二. 对话框的分类

对话框分为 模态对话框非模态对话框
model(bool)属性表示,true为模态,false为非模态

1. 非模态对话框

非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用 QDialog::show() 函数调用
非模态对话框适用于特殊功能设置的场合,比如查找操作,属性设置等

非模态对话框一般在堆上创建,这是因为如果创建在栈上时,弹出的非模态对话框就会一闪而过。因为是在堆上创建,所以需要手动释放,Qt提供 Qt::WA_DeleteOnClose 属性,实现在点击“关闭”按钮后,释放内存空间

代码示例:在窗口添加一个按钮,点击按钮创建对话框
点击按钮的槽函数

void MainWindow::on_pushButton_clicked()
{
    //堆上创建
    QDialog *dialog = new QDialog(this);
    //设置关闭释放
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    //dialog->setModel(false);//也可以设置非模态
    dialog->show();//非模态对话框显示
}

运行结果如下: 弹出对话框后,仍然可以跟父窗口互动,继续创建对话框
在这里插入图片描述


2. 模态对话框

模态对话框:显示后无法与父窗口进行交互,是一种阻塞式的对话框,通过 QDialog::exec() 函数调用
模态对话框适用于必须依赖用户选择的场合,比如消息显示,文件选择,打印设置等

因为模态对话框是阻塞式的,所以在完成交互前,无法与父窗口互动,所以不需要在堆上创建,使用栈对象即可

代码示例:在窗口添加一个按钮,点击按钮创建对话框
点击按钮的槽函数

void MainWindow::on_pushButton_clicked()
{
    //模态对话框
    QDialog dialog(this);
    //dialog.setModal(true);//也可以设置模态
    dialog.exec();//模态对话框显示
}

运行结果如下: 弹出对话框后,无法与父窗口互动
在这里插入图片描述

3. 混合属性对话框

混合属性对话框同时具有 模态对话框非模态对话框 的属性,对话框的生成和销毁具有非模态对话框属性,功能上具有模态对话框属性
使用 QDialog::setModal() 函数创建混合属性的对话框。通常,创建对话框时需要指定对话框的父组件

代码示例:

void MainWindow::on_pushButton_clicked()
{
    //混合属性对话框
    QDialog *dialog = new QDialog(this);//堆上创建
    dialog->setAttribute(Qt::WA_DeleteOnClose);//设置关闭释放
    dialog->setModal(true);//设置模态属性
    dialog->resize(500, 300);//调整大小
    dialog->show();//显示
}

运行结果如下:
在这里插入图片描述

三. 自定义对话框

自定义对话框主要通过 继承 QDialog类,并扩展所需功能
方法有两种:代码实现ui文件实现

1. 代码实现

创建新的类,并继承自 QDialog类,如此既可以使用对话框的功能,也可以为对话框添加控件,布局等

  1. 创建新类在这里插入图片描述
  2. 填写类名、父类等信息在这里插入图片描述
  3. Dialog自定义类 中构建界面 dialog.cpp
Dialog::Dialog(QWidget* parent):QDialog(parent)
{
    //布局管理器
    QVBoxLayout *layout = new QVBoxLayout(this);
    //要添加的控件
    QPushButton *button = new QPushButton("关闭");
    connect(button, &QPushButton::clicked, this, &Dialog::closeDialog);
    QLabel *label = new QLabel("自定义对话框");
    //将控件添加到布局管理器
    layout->addWidget(label);
    layout->addWidget(button);
    //设置布局管理器
    this->setLayout(layout);
}

void Dialog::closeDialog()
{
    this->close();
}
  1. 在主窗口添加按钮,点击按钮弹出自定义对话框
void MainWindow::on_pushButton_clicked()
{
    Dialog *dialog = new Dialog(this);
    dialog->resize(300, 200);
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    dialog->show();//显示对话框
}

运行结果如下:
在这里插入图片描述


2. ui文件实现

ui文件 本质也是新建类,并继承自 QDialog,不过可以使用Qt Designer通过图形化方式,快速布局

  1. 添加 ui文件在这里插入图片描述
  2. 选择 ui文件 类型在这里插入图片描述
  3. 通过 Qt Designer 设计界面在这里插入图片描述
  4. 编写相关按钮的槽函数,大体与 代码实现 相似

运行结果如下:
在这里插入图片描述


四. 内置对话框

1. QMessageBox 消息对话框

消息对话框是应用程序中最常用的界面元素,是一种用于向用户显示信息、警告或错误的窗口。
QMessageBox类 中定义了静态成员函数,可以直接调用创建不同风格的消息对话框
在这里插入图片描述

静态成员函数说明
Question用于正常操作过程中的提问
Information用于报告正常运行信息
Warning用于报告非关键错误
Critical用于报告严重错误

常用API

API说明
void setWindowTitle(const QString &title)设置消息对话框标题
void setText(const QString &text)设置消息对话框文本
void setIcon(QMessageBox::Icon)设置消息对话框图标及类型
void setStandardButtons(QMessageBox::StandardButtons buttons)设置消息框按钮

消息对话框图标及类型为上述四种类型
常用消息框按钮类型如下:

  • QMessageBox::Ok
  • QMessageBox::Open
  • QMessageBox::Save
  • QMessageBox::Cancel
  • QMeesgaeBox::Close
  • QMessageBox::Apply
  • QMessageBox::Reset
  • QMessageBox::Help
  • QMessageBox::Yes
  • QMessageBox::No

这些类型本质是对整数的宏替换
在这里插入图片描述


代码示例:主窗口有一个按钮,点击弹出 Question消息对话框

主窗口按钮的槽函数

void MainWindow::on_pushButton_clicked()
{
    QMessageBox *messageBox = new QMessageBox();
    messageBox->setWindowTitle("Question Message");//设置消息框标题
    messageBox->setText("Are you ok???");//设置消息框文本
    messageBox->setIcon(QMessageBox::Question);//设置图标
    messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Close);//设置按钮
    messageBox->setAttribute(Qt::WA_DeleteOnClose);
    messageBox->show();
}

运行结果如下:
在这里插入图片描述


QMessageBox类 除了使用上述内置的按钮,还可以添加自定义按钮,方法如下:
void addButton(QAbstractButton *button, QMessageBox::Button Role role);
第一个参数是自定义按钮,第二个参数是该按钮的作用,常用类型如下:

类型描述
QMessageBox::InvalidRole-1按钮无效
QMessageBox::AcceptRole0点击按钮,接受对话框
QMessageBox::RejectRole1点击按钮,拒绝对话框
QMessageBox::DestructiveRole2点击按钮,析构并关闭对话框
QMessageBox::HelpRole4点击按钮,请求帮助

Qt 内置的按钮,无法进行信号槽连接
自定义按钮,则可以使用信号槽机制

代码示例:自定义按钮添加至消息对话框

void MainWindow::on_pushButton_clicked()
{
    QMessageBox *messageBox = new QMessageBox();
    messageBox->setWindowTitle("Question Message");//设置消息框标题
    messageBox->setText("Are you ok???");//设置消息框文本
    messageBox->setIcon(QMessageBox::Question);//设置图标
    //自定义按钮
    QPushButton *button = new QPushButton("保存");
    messageBox->addButton(button, QMessageBox::AcceptRole);
    connect(button, &QPushButton::clicked, this, [](){
         qDebug() << "保存信息";
    });
    //设置关闭释放
    messageBox->setAttribute(Qt::WA_DeleteOnClose);
    messageBox->show();
}

运行结果如下:
在这里插入图片描述


使用 QMessageBox 内置的按钮,可以在调用 exec() 后获取用户选择
exec() 返回值为整数,可以与 standardButton枚举类 匹配

代码示例:获取用户对消息对话框的选择

void MainWindow::on_pushButton_clicked()
{
    QMessageBox *messageBox = new QMessageBox();
    messageBox->setWindowTitle("Warning Message");//设置消息框标题
    messageBox->setText("Error Warning");//设置消息框文本
    messageBox->setIcon(QMessageBox::Warning);//设置图标
    messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Help | QMessageBox::Close);//设置按钮
    //设置关闭释放
    messageBox->setAttribute(Qt::WA_DeleteOnClose);
    //获取用户选择
    int ret = messageBox->exec();
    if(ret == QMessageBox::Ok)
        qDebug() << "用户选择Ok";
    else if(ret == QMessageBox::Help)
        qDebug() << "用户选择Help";
    else if(ret == QMessageBox::Close)
        qDebug() << "用户选择Close";
}

运行结果如下:
在这里插入图片描述


QMessageBox 还提供静态成员函数,直接创建对话框,方便使用
举例:warning,函数原型如下:
在这里插入图片描述
参数说明:

  • parent:父对象
  • title:对话框标题
  • text:对话框文本
  • buttons:按钮类型
  • defaultButton:默认按钮类型
    示例:
//静态成员函数
auto ret = QMessageBox::warning(this, "警告", "错误信息警告", QMessageBox::Ok | QMessageBox::Close);
if(ret == QMessageBox::Ok)
    qDebug () << "Ok";
else
    qDebug() << "Close";

2. QColorDialog 颜色对话框

QColorDialog类 提供一个标准的颜色选择对话框,用户可以从中选择颜色,并且可以自定义颜色和编辑颜色
在这里插入图片描述


常用API

API说明
QColorDialog(const QColor &initial, QWidget *parent = nullptr)创建对象,initial指定默认颜色,parent指明父对象
void setCurrentColor(const QColor &color)设置当前颜色的对话框
QColor currentColor()获取当前对话框选择的颜色
void open(QObject *receiver, const char *member)打开颜色对话框

QColorDialog类 同样也提供静态成员函数,帮助快速创建颜色对话框,获取颜色
在这里插入图片描述

  • initial:设置默认颜色
  • parent:设置父对象
  • title:设置对话框标题
  • options:设置选项

QColor 使用的是 ARGBA为alpha(不透明度),RGB分别为Red,Green,Blue数值为0 ~ 1类似百分比,对应0 ~ 255

代码示例:点击主窗口按钮,弹出颜色对话框,通过颜色对话框更改窗口背景色
主窗口按钮槽函数

void MainWindow::on_pushButton_clicked()
{
    QColor color = QColorDialog::getColor(QColor(255, 0, 0), this, "选择背景颜色");
    qDebug() << "你选择:" << color;
    //使用QSS设置
    char style[1024];
    snprintf(style, sizeof(style), "background-color:rgb(%d, %d, %d);", color.red(), color.green(), color.blue());
    this->setStyleSheet(style);
}

运行结果如下:
在这里插入图片描述


3. QFileDialog 文件对话框

QFileDialog类 用于显示文件选择对话框,让用户选择文件或目录,用于应用程序中需要打开一个外部文件或需要将当前内容存储到指定的外部文件

常用API

API说明
QString getOpenFileName()获取要打开的文件的文件名,一次打开一个文件
QStringList getOpenFileNames()一次可以打开多个文件
QString getSaveFileName将当前内容存储到指定的外部文件

上述三个函数既有普通成员函数,也有静态成员函数,参数大体相同,此处举例 getOpenFileName(),函数原型如下:
在这里插入图片描述
参数说明:

  • parent:父对象
  • caption:对话框标题
  • dir:默认打开的路径
  • filter:文件过滤器

上述方法都只是获取文件路径,没有对文件的实质性操作


代码示例:点击按钮,弹出文件对话框,选择要打开的文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QPushButton *button = new QPushButton("打开文件", this);
    //连接信号槽
    connect(button, &QPushButton::clicked, this, [=](){
       QString filepath = QFileDialog::getOpenFileName(this,         //父对象
                                                       "打开文件",    //对话框标题
                                                       "C:/Users/Lenovo/Desktop/code/icon/",  //要打开的文件路径
                                                       "*.png");     //只留下.png后缀的文件
       qDebug() << filepath;
    });
}

运行结果如下:
在这里插入图片描述

4. QFontDialog 字体对话框

QFontDialog类 用于显示字体选择对话框的类,允许用户选择字体、样式和大小等

其常用静态成员函数为 getFont(),其函数原型如下:
在这里插入图片描述

  • ok:ok是输入输出型参数。文本对话框有两个按钮(OK和Cancel),选择OK,ok会变成true,选择Cancel,ok会变成false
  • initial:默认的字体
  • parent:父对象
  • title:对话框标题

代码示例:点击主窗口按钮,弹出文本对话框,选择字体,修改按钮文本的字体

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QPushButton *button = new QPushButton("弹出文本对话框", this);
    button->resize(200, 80);
    //连接信号槽
    connect(button, &QPushButton::clicked, this, [=](){
        bool flag = false;
        QFont font = QFontDialog::getFont(&flag, QFont("宋体", 36), this, "选择文本");
        //打印字体信息
        qDebug() << font.family();
        qDebug() << "字体大小:" << font.pointSize();
        qDebug() << "是否加粗:" << font.bold();
        qDebug() << "是否斜体:" << font.italic();
        //设置按钮字体
        button->setFont(font);
    });
}

运行结果如下:
在这里插入图片描述


5. QInputDialog 输入对话框

QInputDialog 是一个用于获取用户输入的对话框,可以让用户输入文本、选择数字
在这里插入图片描述

常用API
整型输入对话框
在这里插入图片描述

  1. parent:父对象
  2. title:对话框标题
  3. label:对话框文本
  4. value:初始值
  5. min:最小值
  6. max:最大值
  7. step:微调框的步长
  8. ok:输入输出型参数,选择OK为true,选择Cancel为false

双精度浮点型输入对话框
在这里插入图片描述
只有 decimals 是新增的参数,其他参数用法与整形输入框相同

  1. decimals:控制小数的最大位数

选择条目型输入对话框
在这里插入图片描述
前三个参数用法相同

  • items:下拉框的内容
  • current:初始选择条目的下标
  • editable:是否允许输入
  • ok:选择OK为true,选择Cancel为false

代码示例:主窗口点击按钮,弹出选择条目型对话框,选择汉堡

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QPushButton *button = new QPushButton("弹出对话框", this);
    button->resize(200, 100);
    connect(button, &QPushButton::clicked, this, [=](){
        //下拉框条目
        QStringList hamburgs = {"香辣鸡腿堡", "巨无霸", "奥尔良鸡腿堡"};
        bool flag = false;
        //获取选择
        QString item = QInputDialog::getItem(this, "选择汉堡", "请选择:", hamburgs, 0, true, &flag);
        if(flag)
            qDebug() << "您选择:" << item;
        else
            qDebug() << "请重新选择";
    });
}

运行结果如下:
在这里插入图片描述

结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

相关文章

配置 昇腾 Ascend C/C++ 开发环境

配置 昇腾 Ascend C/C 开发环境 flyfish 这里以Orange Pi Ai Pro 为例 先说如何配置MindStudio&#xff0c;然后再说如何查看Orange Pi Ai Pro的一些信息 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭载了昇腾 AI 处理器。Linux 桌面…

100行代码实现自己的RAG知识库

背景 由于日常工作需要对接各种第三方合作方&#xff0c;对接过程中的文档繁多、沟通不及时、问题排查繁琐以及工作具有重复性等问题愈发明显。合作方遇到对接问题需要提工单经门户网站–>产品部门接口人–>开发人员问题排查/修复–>产品部门接口人–>合作方收到回…

公链大变局:ETH老态龙钟,SOL势如破竹

今年年初&#xff0c;比特币现货ETF的通过引发了大量资金涌入加密市场&#xff0c;比特币价格一度突破前高&#xff0c;市场一片繁荣。然而&#xff0c;这一波行情却并未如预期般延续到以太坊。相反&#xff0c;在8月初&#xff0c;以太坊&#xff08;ETH&#xff09;价格近乎腰…

C语言基础⑨——指针

一、指针的引入 int —— 4位&#xff1b;float —— 4位&#xff1b;double —— 8位&#xff1b;short —— 2位&#xff1b;long —— 8位&#xff1b; 为函数修改实参提供支撑&#xff1b;为动态内存管理提供支持&#xff1b;为动态数据结构提供支持&#xff1b;为内存访问…

MT6761 快充同步

MT6761 是反激式电源的高性能60V同步整流器。MT6761兼容各种反激转换器类型。支持 DCM、CCM 和准谐振模式。MT6761集成了一个60V功率MOSFET&#xff0c;可以取代肖特基二极管&#xff0c;提高效率。V SW <V TH-ON 时&#xff0c;MT6761内部 MOSFET 导通。V SW >V TH-OFF …

【AI 绘画】模型转换与快速生图(基于diffusers)

AI 绘画- 模型转换与快速生图&#xff08;基于diffusers&#xff09; 1. 本章介绍 本次主要展示一下不同框架内文生图模型转换&#xff0c;以及快速生成图片的方法。 SDXL文生图 2. sdxl_lightning基本原理 模型基本原理介绍如下 利用蒸馏方法获取小参数模型。首先&#x…

三、前后端分离通用权限系统(3)

&#x1f33b;&#x1f33b;目录 一、角色管理1.1、测试 controller 层1.2、整合 Swagger21.2.1、Swagger 介绍1.2.2、集成 knife4j1.2.2.1 添加依赖1.2.2.2 添加 knife4j 配置类1.2.2.3 Controller 层添加注解1.2.2.4、测试 1.3、定义统一返回结果对象1.3.1、定义统一返回结果…

备战秋招60天算法挑战,Day21

题目链接&#xff1a; https://leetcode.cn/problems/number-of-1-bits/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1ir421M7XU/ LeetCode 191.位1的个数 题目描述 编写一个函数&#xff0c;输入是一个无符号整数 &#xff08;以二进制串的形式&#xff09;&am…

C语言 ——— 学习并使用calloc和realloc函数

目录 calloc函数的功能 学习并使用calloc函数​编辑 realloc函数的功能 学习并使用realloc函数​编辑 calloc函数的功能 calloc函数的功能和malloc函数的功能类似&#xff0c;于malloc函数的区别只在于calloc函数会再返回地址之前把申请的空间的每个字节初始化为全0 C语言…

tweens运动详解

linear 线性匀速运动效果Sine.easeIn 正弦曲线的缓动(sin(t))/ 从0开始加速的缓动,也就是先慢后快Sine.easeOut 正弦曲线的缓动(sin(t))/ 减速到0的缓动,也就是先快后慢Sine.easeInOut 正弦曲线的缓动(sin(t))/ 前半段从0开始加速,后半段减速到0的缓动Quad.easeIn 二次…

c语言基础-------指针变量和变量指针

在 C 语言中,“变量指针”和“指针变量”这两个术语虽然经常交替使用,但它们的侧重点有所不同。 指针变量 “指针变量”是指其值为内存地址的变量。指针变量的类型定义了它所指向的数据类型,例如 int * 是一个指向整型数据的指针变量。 以下是一个指针变量的例子: int v…

数据埋点系列 16| 数据可视化高级技巧:从洞察到视觉故事

数据可视化是将复杂数据转化为直观、易懂的视觉表现的艺术和科学。本文将探讨一些高级的数据可视化技巧&#xff0c;帮助您创建更具吸引力和洞察力的数据展示。 目录 1. 高级图表类型1.1 桑基图&#xff08;Sankey Diagram&#xff09;1.2 树状图&#xff08;Treemap&#xf…

3、目标定位(视觉测距)

目标定位的目的&#xff1a;获取物品相对于视觉模块的三维坐标&#xff0c;并将其转换为物品相对于机械臂坐标原点的三维坐标。 要获取物品三维坐标&#xff0c;则首先要测量物品距离摄像头的距离&#xff0c;又因为摄像头安装在机械臂末端上方&#xff0c;所以获取物品相对于摄…

基于springboot的高校学生服务平台的设计与实现--附源码91686

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能分析 …

代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

目录 一、LeetCode 235. 二叉搜索树的最近公共祖先思路&#xff1a;C代码 二、LeetCode 701.二叉搜索树中的插入操作思路C代码 三、LeetCode 450.删除二叉搜索树中的节点思路C代码 总结 一、LeetCode 235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;LeetCode 235. 二叉搜…

C语言:for、while、do-while循环语句

目录 前言 一、while循环 1.1 while语句的执行流程 1.2 while循环的实践 1.3 while循环中的break和continue 1.3.1 break 1.3.2 continue 二、for循环 2.1 语法形式 2.2 for循环的执行流程 2.3 for循环的实践 2.4 for循环中的break和continue 2.4.1 break 2.4.2 …

Java数组03:数组边界、数组的使用

本节内容视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p55&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p55&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.数组边界 数组下标的合法区间[ 0, Len…

综合监管云平台存在信息泄露漏洞_中科智远综合监管云平台

0x01阅读须知 本文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考。本文章仅用于信息安全防御技术分享&#xff0c;因用于其他用途而产生不良后果,作者不承担任何法律责任&#…

昇腾 - 快速理解AscendCL(Ascend Computing Language)基础概念的HelloWord

昇腾 - 快速理解AscendCL&#xff08;Ascend Computing Language&#xff09;基础概念的HelloWord flyfish AscendCL&#xff08;Ascend Computing Language&#xff09;是一套用于在昇腾平台上开发深度神经网络应用的C语言API库&#xff0c;提供运行资源管理、内存管理、模型…

鸿蒙(API 12 Beta3版)【录像流二次处理(C/C++)】媒体相机开发指导

通过ImageReceiver创建录像输出&#xff0c;获取录像流实时数据&#xff0c;以供后续进行图像二次处理&#xff0c;比如应用可以对其添加滤镜算法等。 开发步骤 导入NDK接口&#xff0c;接口中提供了相机相关的属性和方法&#xff0c;导入方法如下。 // 导入NDK接口头文件#in…