[QT开发_音乐播放器项目笔记01]

目录

一:常用类

26 QByteArray 是 Qt 框架中的一个类,用于处理字节数组。它提供了动态大小的字节数组,可以用于存储和操作二进制数据,比如文件内容、网络数据等。

QT项目记录:

一:常用类

26 QByteArray 是 Qt 框架中的一个类,用于处理字节数组。它提供了动态大小的字节数组,可以用于存储和操作二进制数据,比如文件内容、网络数据等。

  • 构造与析构

    • QByteArray(): 默认构造函数。
    • QByteArray(const char *str): 从 C 字符串构造。
    • QByteArray(const QByteArray &other): 拷贝构造函数。
  • 大小与容量

    • int size() const: 返回字节数组的大小。
    • int capacity() const: 返回当前分配的内存容量。
    • void resize(int size): 修改数组大小。
  • 数据访问

    • const char* constData() const: 返回只读数据指针。
    • char* data(): 返回可写数据指针。
    • char operator[](int i) const: 按索引访问元素。
  • 字符串操作

    • QByteArray append(const QByteArray &other): 追加另一个字节数组。
    • QByteArray prepend(const QByteArray &other): 在前面添加字节数组。
    • QByteArray mid(int pos, int len = -1) const: 提取子数组。
  • 查找与替换

    • int indexOf(const QByteArray &ba, int from = 0) const: 查找子数组的索引。
    • void replace(int pos, int len, const QByteArray &ba): 替换子数组。
  • 编码与解码

    • QByteArray toBase64() const: 转换为 Base64 编码。
    • QByteArray fromBase64(const QByteArray &ba): 从 Base64 解码。
  • 比较与赋值

    • bool operator==(const QByteArray &other) const: 比较相等性。
    • QByteArray& operator=(const QByteArray &other): 赋值操作符。

在json中的使用:

QByteArray jsonBytes = doc.toJson(); 这行代码的意思是将一个 QJsonDocument 对象 doc 转换为 JSON 格式的字节数组。

doc.toJson()

  • 这个方法将 QJsonDocument 转换为 JSON 字符串,返回一个 QByteArray
  • 字节数组是这样的  {"name":"Alice","age":30}
  • 默认情况下,它生成紧凑格式的 JSON 字符串。

QByteArray jsonBytes

  • jsonBytes 是一个字节数组,存储转换后的 JSON 数据。

用途

  • 传输:可以将 jsonBytes 用于网络传输,例如通过 HTTP 请求发送数据。
  • 存储:可以将 jsonBytes 写入文件或数据库中,以便将 JSON 数据持久化。
  • 进一步处理:可以对 jsonBytes 进行编码、压缩等其他处理。

27  QJsonObject 是 Qt 框架中用于表示 JSON 对象的类。它提供了一个键值对的集合,可以存储各种数据类型,包括数字、字符串、数组、布尔值和其他 JSON 对象。

  • 表示一个 JSON 对象,存储键值对(类似于字典或映射)。
  • 用途
    • 用于表示 JSON 数据的一个部分,可以存储字符串、数字、布尔值、数组或其他 JSON 对象。
  • 常用方法
    • insert(const QString &key, const QJsonValue &value): 插入或更新键值对。
    • remove(const QString &key): 移除指定键。
    • contains(const QString &key) const: 检查是否包含特定键。
    • QJsonValue operator[](const QString &key) const: 通过键访问对应的值。
    • QList<QString> keys() const: 获取所有键的列表。
  • 序列化与反序列化

    • 可以通过 QJsonDocument 来序列化和反序列化 QJsonObject

28  QJsonDocument 表示一个完整的 JSON 文档,可以是一个 JSON 对象或 JSON 数组。

用途:

        用于序列化和反序列化 JSON 数据,将 QJsonObjectQJsonArray 转换为 JSON 字符串,或从字符串解析为对象。

常用方法

  • setObject(const QJsonObject &object): 设置 JSON 文档为一个 JSON 对象。
  • setArray(const QJsonArray &array): 设置 JSON 文档为一个 JSON 数组。
  • QJsonObject object() const: 获取文档中的 JSON 对象(如果是对象)。
  • QJsonArray array() const: 获取文档中的 JSON 数组(如果是数组)。
  • QString toJson(Format format = Compact) const: 将 JSON 文档转换为字符串,支持紧凑和缩进格式。
  • static QJsonDocument fromJson(const QByteArray &data): 从 JSON 字符串解析出 QJsonDocument

 29 QJsonParseError 是 Qt 中用于表示 JSON 解析错误的类。它通常与QJsonDocument 类一起使用,用于在解析 JSON 字符串时报告任何错误。

30 QVariant是 Qt 提供的一个通用值类,可以存储几乎所有 Qt 支持的数据类型的值

是 Qt 提供的一个通用值类,可以存储几乎所有 Qt 支持的数据类型的值,包括基本数据类型(如整数、浮点数、布尔值等)、复杂数据类型(如字符串、列表、映射等)以及用户自定义的数据类型。

31 QSettings 是 Qt 框架中的一个类,用于在应用程序中存储和读取配置信息。

QT项目记录:

问题记录1: Json的序列化和反序列化

序列化定义:将数据结构(如对象、数组等)转换为 JSON 格式的字符串。

用途

  • 将数据保存到文件或数据库。
  • 在网络传输中发送数据。

示例

QJsonObject obj;
obj["name"] = "Alice";
obj["age"] = 30;QString jsonString = QJsonDocument(obj).toJson(QJsonDocument::Compact);
//Compact:表示生成的 JSON 字符串将采用紧凑格式。
//也就是说,输出的 JSON 字符串不包含任何多余的空格或换行符,
//所有内容都在一行上,以最小化文件大小。

反序列化定义:将 JSON 格式的字符串解析为原始的数据结构(如对象、数组等)。

用途

  • 从文件或数据库读取数据并恢复为可用的对象。
  • 接收网络数据并转换为程序中可用的格式。

示例

QString jsonString = "{\"name\":\"Alice\",\"age\":30}";
QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8());
QJsonObject obj = doc.object();
QString name = obj["name"].toString();
int age = obj["age"].toInt();

总结:

  • 序列化:将对象转为 JSON 字符串。
  • 反序列化:将 JSON 字符串转为对象。

问题记录2:Json对象可以处理,为什么还要将json文档设置为一个json对象呢?

  • 完整性

    • QJsonDocument 可以表示整个 JSON 文档,包含一个 JSON 对象或 JSON 数组。它用于处理整个结构,而不仅仅是单一的键值对集合。
  • 序列化与反序列化

    • QJsonDocument 提供了方便的方法,将 JSON 对象或数组转换为字符串(序列化)或从字符串解析为 JSON 对象/数组(反序列化)。例如,可以将整个 JSON 文档保存到文件或发送到网络。
  • 格式化输出

    • 可以使用 QJsonDocument 控制输出的格式,例如生成紧凑的 JSON 字符串或可读性更好的缩进格式。

  • 使用 QJsonObject:当你只需要处理 JSON 对象的键值对时,可以使用 QJsonObject
  • 使用 QJsonDocument:当需要处理整个 JSON 数据结构,包括需要转换为字符串或解析时,就需要使用 QJsonDocument

问题记录3:QT种如何起一个服务器?

问题记录4:QStackedWidget中通过代码写的页是不能在ui设计的界面中看到?

因为没有运行,就不会整合代码,ui设计是ui设计,代码是代码。只有在运行的时候,会在窗口中共同显示。

    ui->stackedWidget->addWidget(p->from);//将页面显示区域中的一页设置为p->fromui->stackedWidget->addWidget(p->musiclist);ui->verticalLayout->addWidget(p->musicForm);
//这里是在代码中添加的页,但是在.ui文件中是不能看到的。
//因为,他们根本就不挨着,是分开的,只有在运行时才会显示到界面上去。

问题记录5:layout可以单独使用?

layout单独使用,可以直接将控件拖到窗口中。然后在layout中添加其他控件,这样layout中的控件就能自动布局了。

问题记录6:C中sprintf()函数如何使用

char buf[4096] = {0};
sprintf(buf,"%s%s",count.toStdString().c_str(),pwd.toStdString().c_str());
  1. buf

    • 这是一个字符数组,用于存储格式化后的结果。
  2. "%s%s"

    • 格式字符串,表示将两个字符串拼接在一起。
  3. count.toStdString().c_str()

    • count 转换为标准字符串,然后获取其 C 风格字符串指针。
  4. pwd.toStdString().c_str()

    • pwd 转换为标准字符串,然后获取其 C 风格字符串指针。

结果

  • sprintf()countpwd 的字符串值拼接并存入 buf 中。

问题记录7:QTcpSocket::readyRead()这个信号什么时候可以被触发。

触发条件

  1. 有数据可读
    • 当从远程主机接收到数据并且这些数据可用时,readyRead 信号会被发射。
    • 这意味着 TCP 连接上有新的数据到达,可以通过调用 read(), readAll(), 或 readLine() 等方法读取。

具体场景

  • 客户端

    • 如果你有一个 TCP 客户端连接到服务器,并且服务器发送了一些数据,readyRead 信号会被触发,通知客户端可以读取这些数据。
  • 服务器

    • 在服务器端,当客户端发送请求或数据时,服务器的 QTcpSocket 对象会接收到数据,并发出 readyRead 信号。

通过样式表文件.qss文件,设置widget的边框线为灰色

QWidget

{

border-top: 2px solid gray;

}

border-top: 这个属性用于定义上边框的样式。

  • 2px: 边框的宽度为 2 像素。
  • solid: 边框类型为实线。
  • gray: 边框颜色为灰色。

通过样式表设置自定义界面类中的控件样式

//在前面声明是那个类musicinfobar QPushButton#pushButton_touxiang
{border-radius: 20px;background-color:rgb(38,206,170);
}

问题记录8:如何使用自定义的设计师界面类?

//如何将自定义按钮添加到指定的位置呢

//大致的思路都是这样的,自定义一个设计师界面类后,首先先将实例化一个对象,通过类的函数来使用ui指针如在类内设置函数setname,set,填充自定义的界面,之后通过主界面的中控件的函数add...一类的函数,将自定义控件塞到,主界面控件中

QListWidgetItem *item = new QListWidgetItem;
SongList* sl = new SongList;    //自定义的类            
QStringList lineList =  path3.split("-");
item->setSizeHint(sl->size());
ui->songlist->addItem(item);
ui->songlist->setItemWidget(item,sl);
sl->SetSongName(lineList[0]);    //调用自定义的类的函数,来设置自定界面中的内容
sl->SetSongerName(lineList[1]);

QFileInfo中文件操作中的两个函数

fileName() 函数

  • 定义QString fileName() const;
  • 用途:获取包含路径的完整文件名,包括文件的扩展名。

baseName() 函数

  • 定义QString baseName() const;
  • 用途:获取文件的基本名称,即不包括路径和扩展名的部分。

问题记录9:在QT中listwidget中的每行item都可以放一个数据,如何放入数据,如何去除数据

//将数据放入item使用setData函数,如下:
listitem->setData(Qt::UserRole,ite->path() + "/"  +  ite->fileName());如何使用放到item中的数据呢,定位到listwidget的当前行,然后使用data取出数据,如下:
QString MusicPath = ui->listWidget_localmusic->currentItem()-
>data(Qt::UserRole).toString();

问题记录10:QT中对于一个音乐路径,怎样按某个特定的字符分成的所有段,全部放到一个list里面

//按照==分割,将分割的所有段,放到linelist列表中
QStringList linelist = line.split("=");//访问这个列表使用数组下标的方式来进行访问。
QString love = linelist[1];

问题记录10:在主界面类中将其他自定义界面类作为主界面的成员变量,这个就叫做组合,维护一个该自定义界面类的指针,就可以动态的管理这个界面了,也就可以不断的更新这个对象了。

如何使用 infoBar 对象:

  1. 在主界面类中声明 infoBar 对象

    musicinfobar *infoBar;
    
  2. 在构造函数或初始化阶段创建 infoBar 对象

    // 假设在构造函数或初始化阶段创建 musicinfobar 对象
    infoBar = new musicinfobar(/* 传递相应的参数 */);
    verticalLayout->addWidget(infoBar);
    
  3. 根据需要更新 infoBar 对象的内容

    // 在槽函数或其他需要的地方,根据用户操作或其他条件更新 infoBar 对象的内容
    void MainWindow::onListItemClicked(QListWidgetItem *item) {// 可以根据点击的项更新 infoBar 对象的内容int index = listWidget->row(item);infoBar->updateMusicInfo(/* 根据 index 更新音乐信息 */);
    }
    

注意事项:

内存管理:你需要确保在适当的时候释放 infoBar 对象的内存,通常在主界面类的析构函数中释放:

MainWindow::~MainWindow() {delete infoBar;
}
  • 这样可以避免内存泄漏。

  • 对象的生命周期infoBar 对象的生命周期与主界面类对象的生命周期相同,因此它会在主界面类对象销毁时自动释放。

  • 更新内容:使用 infoBar 对象时,可以直接调用它的方法来更新显示的内容,而无需每次重新创建对象。

通过以上方法,你可以在主界面中维护一个 musicinfobar 对象,并利用它来实现在 QVBoxLayout 中动态显示和更新音乐信息的功能。

问题记录11:如何将一个把一张图片,设置到一个按钮上面

QString imagePath = "/path/to/poster.png";  // 替换为你的海报文件路径
QPixmap posterPixmap(imagePath);//示例
QPixmap pix(path);
ui->pushButton_touxiang->setIcon(pix);
ui->pushButton_touxiang->setIconSize(QSize(50, 50));  // 设置图标大小

问题记录12:QT中的绘图事件paintEvent,怎么使用

作用:

  • paintEvent 用于绘制窗口部件的内容,例如绘制文本、图形、图像等。
  • 当窗口部件的内容需要更新或者需要重新绘制时,Qt 会自动触发 paintEvent 函数来执行绘制操作。

调用时机:

  • paintEvent 函数在窗口部件第一次显示、大小变化、窗口内容需要更新时等情况下被自动调用。
  • 开发者也可以手动调用 QWidget::update() 函数来触发 paintEvent,以实现手动刷新界面。

问题记录13:在使用QT的C/S网路通信时,始终连接不上

遇到这个问题时,因为所连接的无线网,科学上网也开着的,所以就一直连接不成功,这个在连接的时候一定的要关闭才行。

问题记录14:怎样在QT中创建一个数据呢?

答案是,一般情况下,我们不需要在Qt上创建数据,我们可以在QT上使用MySQL服务器型数据库,因为,MySQL数据是服务器型数据库,既然是服务器型,就要部署在远端,远端的操作系统一般是Linux系统,所以,我们一般是在Linux上创建数据库,然后在Qt中使用它。

问题记录15:在Linux上使用MySQL数据库的全流程

1. 安装 MySQL 服务器

sudo apt update  # 更新包列表(仅适用于Debian/Ubuntu)
sudo apt install mysql-server  # 安装MySQL服务器

2. 启动 MySQL 服务

sudo systemctl status mysql  # 检查MySQL服务状态
sudo systemctl start mysql   # 启动MySQL服务
sudo systemctl enable mysql  # 设置MySQL服务开机自启(可选)

3. 连接到 MySQL 数据库

mysql -u 用户名 -p

4. 创建数据库

CREATE DATABASE IF NOT EXISTS dbname;

5. 创建用户并授权(可选)

CREATE USER '新用户名'@'localhost' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON dbname.* TO '新用户名'@'localhost';
FLUSH PRIVILEGES;

6. 执行基本操作

USE dbname;  -- 切换到你创建的数据库CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,...
);

7. 断开连接和关闭服务

quit;  -- 退出MySQL命令行客户端sudo systemctl stop mysql  # 停止MySQL服务

问题记录16:怎样进行大文件传输,如发送.mp3文件,怎么发送。

问题记录17:在Qt上创建MySQL的连接对象,进行连接的时候,连接不上远端MySQL服务器问题。

//使用Qt只能使用已经创建好的动态库来使用,因为Qt没有加载指定的数据库驱动程序   
//所以要在服务器上创建好数据,写好接口,然后制作成动态库,最后将动态库添加到.exe可执行文件所在文件夹下。

问题记录18: 怎样将utf-8编码转为GB2312中文。

由于notepad++中不可截图这里详细说明:首先转为ANSI编码,然后使用找到编码字符集,在编码字符集中找到中文,然后选择GB2312。

问题记录19:如通过listWidget中的当前行的行号,拿到item的指针 ListWidget*item 指针 。

//拿到当前行
int currentRow = ui->listWidget_localmusic->currentRow();//通过listwidget的行号,拿到它的*item指针
QListWidgetItem* item = ui->listWidget_localmusic->item(upRow);

问题记录20:listWidget的信号中QListWidget::clicked信号没有返回值

QListWidget::clicked信号,无返回值。

QListWidget::ItemClicked信号有返回值,返回值为QListWidgetItem*类型的

问题记录21 : comboBoxQt中可以下拉选择的控件。

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

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

相关文章

【JavaScript】详解JavaScript语法

文章目录 一、变量和数据类型二、运算符三、条件语句四、循环语句五、函数六、对象和数组七、ES6新特性八、实际应用案例 JavaScript是一门广泛应用于Web开发的编程语言。掌握JavaScript语法是成为前端开发者的第一步。本文将详细介绍JavaScript的基本语法&#xff0c;包括变量…

Python技能达到这个水平,高薪就业不是梦

一&#xff0c;高薪就业的必备基础 要达到高薪就业的水平&#xff0c;Python开发者通常需要具备以下几方面的技能和经验&#xff1a; 如需Python籽料直接戳&#xff1a; 2024年最新python教程全套&#xff0c;学完即可进大厂&#xff01;&#xff08;附全套视频 下载&#xf…

软件测试必备 - 14个接口与自动化测试练习网站

随着互联网和移动应用的快速发展,接口和自动化测试的重要性日益凸显。越来越多的企业开始重视API测试,因为它不仅能提升开发效率,还能确保系统的稳定性和安全性。这些练习网站为测试人员提供了宝贵的资源,帮助他们掌握必要的技能,应对日益复杂的测试需求。 在软件测试的世…

【Linux】TCP全解析:构建可靠的网络通信桥梁

文章目录 前言1. TCP 协议概述2. TCP报头结构3. 如何理解封装和解包呢&#xff1f;4. TCP的可靠性机制4.1 TCP的确认应答机制 4.2 超时重传机制5. TCP链接管理机制5.1 经典面试题&#xff1a;为什么建立连接是三次握手&#xff1f;5.2 经典面试题&#xff1a;为什么要进行四次挥…

Java每日一题 ~ 盛最多水的容器

. - 力扣&#xff08;LeetCode&#xff09; 1.题目解析 本题的要求就是&#xff1a;给定数组索引之间的差值为宽&#xff0c;元素值中小的为边长求面积。 2.算法分析 思路一&#xff1a;暴力枚举 暴力法的思路是对所有可能的容器组合进行穷举&#xff0c;计算它们能容纳的水…

[硬件]—电感传感器

电感传感器 1.概述 工作基础&#xff1a;电磁感应&#xff0c;即利用线圈自感或互感的改变来实现非电量测量。工作原理&#xff1a; 被测物理量&#xff08;非电量&#xff1a;位移、振动、流量&#xff09;&#xff1b;线圈自感系数L/互感系数M&#xff1b;电压或电流&#…

0729作业+梳理

一、作业 1.写一个日志文件&#xff0c;将程序启动后的每一秒时间写入到文件中 代码&#xff1a; #include<myhead.h> #include<time.h> //判断原本文件中的行数 int len_txt(FILE *fp) { char buf0; int count 1; while(1) { buffgetc…

计算是守恒与对称的,谋算(算计)是变通与破缺的

计算通常涉及到严格的数学或逻辑规则&#xff0c;这些规则保证了信息或量的守恒和对称性。例如&#xff0c;数学运算如加减乘除都遵循特定的规律&#xff0c;确保了结果的准确性和一致性。相比之下&#xff0c;谋算&#xff08;或称算计&#xff09;更多指策略性的考虑或具有权…

Redis 缓存中间件

目录 概念 安装redis redis基本命令 给redis添加密码 基础数据类型 string类型 list列表类型 set创建&#xff08;一个键对应一个值&#xff09; set 创建数据 get 获取数据 keys * 展示所有的键 exists 判断键值是否存在 type 查看数据的类型 del 删除键 rename…

学习008-02-04-03 Group List View Data(组列表查看数据)

Group List View Data&#xff08;组列表查看数据&#xff09; This lesson explains how to group the Employee List View data by department and position. 本课介绍如何按部门和职位对员工列表视图数据进行分组。 Note Before you proceed, take a moment to review the …

机械学习—零基础学习日志(高数15——函数极限性质)

零基础为了学人工智能&#xff0c;真的开始复习高数 这里我们将会学习函数极限的性质。 唯一性 来一个练习题&#xff1a; 再来一个练习&#xff1a; 这里我问了一下ChatGPT&#xff0c;如果一个值两侧分别趋近于正无穷&#xff0c;以及负无穷。理论上这个极限值应该说是不存…

2024下《系统架构设计师》案例简答题,刷这些就够了!

2024年软考下半年已经越来越近了&#xff0c;不知道今年备考架构的同学们准备得怎么样了呢&#xff1f; 简答题一直是架构拿分的重点区域&#xff0c;对于许多考生来说&#xff0c;也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家&#xff0c;希望…

02 Go语言操作MySQL基础教程_20240729 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728 基础不好的同学每节课的代码最好配合视频进行阅读和学习&#xff0c;如果基础比较扎实&#xff0c;则阅读本教程巩固一下相…

Qt Designer,仿作一个ui界面的练习(二):部件内容的填充

有了完成了布局的基本框架设计之后&#xff0c;对各个部件逐步完成内容的填充。 一、还是从顶边栏开始&#xff1a; 1、在顶边栏的topLogo里面拖入一个QLabel&#xff08;标签&#xff09;&#xff0c;命名为logoImage&#xff0c;删除标签的文字。 2、右键点击topLogo&#x…

计算机三级嵌入式(三)——嵌入式系统硬件组成

目录 考点1 嵌入式最小硬件系统 考点2 基于 ARM 内核的典型嵌入式应用系统硬件组成 考点3 ARM 的 AMBA 总线体系结构及标准 考点4 基于 ARM 内核的嵌入式芯片的硬件组成 考点5 存储器层次结构 考点6 存储器分类 考点7 存储器主要性能指标 考点8 片内存储器 考点9 外部…

IndexError: list index out of range

IndexError: list index out of range 目录 IndexError: list index out of range 【常见模块错误】 【解决方案】 原因分析 解决方法 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身…

接口自动化中对于文件上传的处理方法

正常的接口自动化基本都是json的格式&#xff0c;对于文件上传是一种特殊的格式是表单格式针对这种表单格式在接口自动化中怎么处理&#xff0c;主要通过工作中使用的一个实际的例子进行分享 举例&#xff1a;web上需要导入一个文件实现相关的功能&#xff0c;主要通过两个接口…

C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性

文章目录 C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性转换Tip切换内容介绍显示方式字体色背景色 常用光标控制附示例和运行结果 C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性 标准输出格式其属性可控制&#xff0c;控制由一系列的控制码指定。标准输出函数可…

这才是 PHP 高性能框架 Workerman 的立命之本

大家好&#xff0c;我是码农先森。 在这个大家都崇尚高性能的时代&#xff0c;程序员的谈笑间句句都离不开高性能&#xff0c;仿佛嘴角边不挂着「高性能」三个字都会显得自己很 Low&#xff0c;其中众所皆知的 Nginx 就是高性能的代表。有些朋友可能连什么是高性能都不一定理解…

C++11 列表初始化与类型声明

目录 ​ 0.前言 1.C11介绍 2.统一的列表初始化 2.1{}初始化 2.2initializer_list 2.2.1initializer_list 的基本用法 2.2.2用于类的 initializer_list 构造函数 2.2.3与标准库容器的结合 2.2.4优势与注意事项 3.新声明 3.1auto 3.1.1基本用法 3.1.2优势 3.1.3注意事项 3.2declt…