QT学习笔记(六)

2023-11-15

第11章 容器类

Qt提供了自己的容器类,在编写Qt程序时,既可以使用Qt容器,也可以使用STL容器。

  1. 连续容器

1)向量QVector<T>:它是一种与数组相似的数据结构,它可以把项存储到内存中相邻的位置。向量与普通C++数组的区别在于:向量知道自己的大小并且可以被重新定义大小。
在向量的末尾添加或删除额外的项是非常快速有效的,而在向量的前面或中间插入或删除项则是比较耗时的,因为这样可能导致大量的项目在内存中移动一个位置。对于较大的向量来说,这种现象尤为严重,因此Qt提供了QLinkList<T>容器。
2)链表QLinkList<T>: 它是一种把项存储到内存中不相邻位置的数据结构。与向量不同,链表不支持快速的随机访问,但它提供“常量时间”的插入和删除。链表并未提供[]操作符,因此必须使用迭代器来遍历项而不能使用整数索引。当向一个很大的列表中间插入项目时,QLinklist比下面的QList拥有更好的性能。
3)列表QList<T>: 它结合了单一类中QVector<T>和QLinkList<T>的最重要的优点,是目前最常用的容器类。它存储了给定值的一个列表,而且这些值可以通过索引访问。在内部QList使用数组实现,它支持随机访问。在QList<T>的任意一端插入或者移除项都是非常快速的。除非我们想在一个极大的列表中执行插入或者要求列表中的元素都必须占据连续的内存地址,否则QList<T>通常是最适合采用的多用途容器类。
这三个连续容器类还衍生出了一些方便的子类:QStringList容器常用于字符串处理,他是QList<Qstring>的子类。QStack<T>是一个可以提供push()、pop()、和top()方法的 向量。QQueue<T>是一个可以提供enqueue()、dequeue()和head()的 列表。

对于前面所讲过的容器类,值类型T可以是一个int,double类型,指针类型,或满足一定条件的类(不能是派生自QObject的Qt类,因为他们没有复制构造函数和赋值操作符,如果想要使用派生自QObject的类,可以存储指向QObject类的指针)。
值类型T也可以是一个容器。
4)Qt提供两类迭代器用于遍历存储在容器中的项:Java风格的迭代器和STL风格的迭代器。Java风格迭代器易于使用,STL风格迭代器可以结合STL的一般算法而具有更强大的功能。
Java风格迭代器可分为:只读迭代器和读-写迭代器。对每一个连续容器C,只读迭代器记为:“C+Iterator<T>",而读-写迭代器则在其名字中含有“Multable”字样。例如:QVectorIterator<T>,QMultableVectorIterator<T>。读-写迭代器在遍历时提供了插入、修改以及删除项的函数。

当使用Java风格迭代器时,必须首先牢记的是:它们本身并不是直接指向项的,而是定位在第一项之前,最后一项之后或者是两项之间。
在这里插入图片描述
用法:

QListIterator<double> i (list);  //只读迭代器定义并初始化
i.hasnext();  //如果迭代器右边有 一个项,则hasnext()函数返回true  
i.next();  //next()函数返回迭代器右边的项并且将迭代器向后移动一个位置,类似的还有previous()函数
i.toBack();  //将迭代器定位到最后一项之后的位置
QMultableListIterator<double> i (list);  //读-写迭代器定义并初始化
i.remove(); //remove()函数删除迭代器右边的项并且将迭代器往后移一个位置

STL风格迭代器也有两种类型: 对每一个连续容器C<T>,STL风格迭代器类型有C<T>::iterator和C<T>::const_iterator。这两者的区别在于const_iterator不允许修改数据。
STL风格的迭代器的语法是模仿C++数组的指针。我们可以使用++ 和-- 操作符来移动下一项或前一项,而使用一元操作符*来获得当前项。例如:对于QVector<T>,iterator和const_iterator类型只是T*和const T*的别名。
在这里插入图片描述
用法:

QList<double>::iterator i = list.begin();  //定义并初始化STL风格迭代器 i
//容器的begin()函数返回引用容器中第一项的STL风格迭代器(例如:list[0]),而end()函数返回引用“最后一个项之后的”项的迭代器(例如:对于一个大小为5的列表,取list[5])。
i++; // 迭代器右移1个单元

Qt还提供而来一种在连续容器中遍历的方式 – foreach循环。例如:

QLinkList<Movie> list;
foreach(Movie movie, list) {
    if(movie.title() ==  "Citizen Kane") {
    std::cout << "Found Citizen Kane" << std::endl;
    break;
}

foreach伪关键字按照标准的for循环实现。在循环的每一次迭代中,迭代变量(如上例中的movie)都被设为一个新项,从容器的第一项开始向后迭代。foreach循环会在进入循环时自动复制一个容器,因此即使在迭代过程中修改了容器类,也不会影响到循环。

  1. 关联容器

关联容器可以保存任意多个具有相同类型的项,且它们由一个键索引。Qt提供两个主要的关联容器类:QMap<K,T>和QHash<K,T>。
1)映射QMap<K, T>是一个以升序键顺序存储键值对的数据结构。它提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。QMap按照键值升序排列,这种排列使它可以提供良好的查找和插入性能,以及键序的迭代。如果不关心存储顺序,那么可以使用下面的QHash,因为QHash更快。
QMap<K, T>的K和T数据类型可以是int,double,指针类型,或满足一定条件的类。用法:

QMap<QString,int> map;
map.insert("eins",1);
map.insert("sieben",7);
map.insert("dreiundzwaning",23); //在映射中插入项
          
int val = map.value("dreiundzwaning");  //获得键值

映射通常都是单一值,如果赋予一个现有的键一个新值,则原有的旧值将被该新值取代,以确保两个项不会共有同一个键。通过使用insertMulti()函数或QMultiMpa<K,T>子类,可以让多个值有相同的键。

QMultiMap<int,QString> multiMap;
multiMap.insert(1,“one");
multiMap.insert(1,"eins");
multiMap.insert(1,"uno");

QList<QString> vals = multiMap.values(1);  //返回一个给定键对应的所有值的QList列表

2)QHash<K,T>是一个在哈希表中存储键值对的数据结构。它提供了比QMap<K,T>更快的查找功能。QHash的数据是按照任意顺序存储的。
QHash<K,T>为它内部的哈希表自动分配最初的存储区域,并在有项被插入或删除时重新划分所分配的存储区域的大小。哈希表通常都是单一值,可以通过使用insertMulti()函数或MultiHash<K,T>子类,可以将多个值赋给同一个键。

  1. 通用算法

<QtAlgorithms>的头文件声明了在容器类上实现基本算法的一套全局模板函数。这些函数大部分都是在STL风格的迭代器上工作。
1)qFind()算法:在容器类中线性查找一个特定的值。它接受一个“begin”和“end”迭代器,并且返回一个与其匹配的指向第一项的迭代器。如果没有匹配的项,则返回“end”。用法:

QStringList::iterator i = qFind(list.begin(),list.end(),“Karl”);

2)qBinaryFind()算法:适用于容器中的项都是顺序存储的情况,且使用二分查找,效率更高。
3)qFill()算法:用一个特定的值组装一个容器。用法:

QLinkList<int> list(10);
qFill(list.begin(),list.end(),1000);  //将list的每一项都赋值为1000

4)qCopy()算法:将一个容器类的值复制到另一个容器类中。用法:

QVector<int> vect(list.count());
qCopy(list.begin(),list.end(),vect.begin());  //将list.begin()到list.end()之间的值复制到vect.begin()开始往后的项中

qCopy()也可以用来在同一个容器类中复制值,只要数据来源范围与目标范围不重叠。如:

qCony(list.begin(),list.begin()+2,list.end()-2); 它将列表的前两项复制到列表的后两项。

5)qSort()算法: 以升序排列容器中类中的项。默认情况下qSort()使用“<”操作符对项进行比较。用法:

qSort(list.begin(),list.end());

我们也可以将qGreator()作为第三个参数来传递,来使qSort()为升序排列。如:

qSort(list.begin(),list.end(),qGreator<int>());

6)qStableSort()算法:功能与qSort()相似,但qStableSort()算法可以保证进行对等比较的项在排序之后表现出与之前相同的顺序。
7)qDeleteAll()算法:对每一个存储在容器类中的指针调用delete。这仅对那些指针类型的容器才有意义。在调用之后,这些项仍然作为悬摆指针存在于容器类之上,因此通常我们也应该在容器类上调用clear()。用法:

qDeleteAll(list);
list.clear();

8)qSwap()算法:交换两个变量的值。用法:

int x1,x2;qSwap(x1,x2);
  1. 字符串、字节数组和变量

1)字符串类QString:C++提供两种字符串,传统C语言型的以“\0”结尾的字符数组和std::string类。与这两种字符串不同,QString支持16位Unicode编码。从概念上说,可以将QString看成是QChar向量。

length()函数:该函数会返回字符串的大小。要注意的是,QString可以嵌入“\0”字符,length()函数会返回包括被嵌入的“\0”字符的整个字符串的大小。

+&+=操作符:QString为连接两个字符串提供了一个二进制+操作符,还为在字符串后追加字符串提供了+=操作符。用法:

QString str = "User: ";
str += userName + "\n";

QString::append()函数与+=操作符的功能相同:str = "User: "; str.append(userName); str.append("\n");

arg()函数:用来替换前面的“%n”参数。如:

str = QString(“%1 %2 (%3s-%4s)”)
		.arg(“permission”).arg(“society”).arg(1950).arg(1970);

在这个例子中,“permission”会取代“%1”,“ society”会去代“%2”,“1950”与“1970”会依次取代“%3”和“%4”相应的结果为“permission society (1950s-1970s)”。

将数字转换为字符串:使用QString::number()静态函数,或者也可以使用setNum()函数。用法:

str = QString::number(59.6);    或   str.setNum(59.6);

将字符串转换为数字:使用toInt()、toLongLong()、toDouble()等函数。这些函数接受一个指向bool变量的指针,并且根据转换的结果将变量值设为true或false。如果转换没有完成,这些函数将返回0。用法:

bool ok;    double d = str.toDouble(&ok);

mid()函数:该函数返回在给定位置(第一个参数)开始且到达给定长度(第二个参数)的子串。如果省略第二个参数,该函数将返回在给定位置开始到字符串末端结束的子串。用法:

QString str = "polluter pays principle";  qDebug() << str.mid(9);

也可以使用left()函数和right()函数来完成相似的任务。它俩都可以接收字符的数量n,并且返回字符串的前n个字符或最后n个字符。用法:

qDebug() << str.left(8) << str.right(9);

indexOf()函数:查明一个字符串是否包含一个特定的字符、子串或者正则表达式。查找成功时返回字符(或子串首字符)在字符串中的位置,失败时该函数返回-1。用法:

QString str = "the middle bit";
int i = str.indexOf("middle");  //该函数将i的值设为4

利用==操作符进行字符串的比较是区分大小写的。如果比较并不区分大小写,则可以使用toUpper() 或toLower()函数。用法:

if(fileName.toLower() == "readme.txt");

如果想用一个字符串来代替另一个字符串中的某一部分,可以使用replace(); 用法:

str.replace(2,6,"Sunny");

replace()函数也可以用来让第二个参数代替所有第一个参数出现的地方。如:

str.replace("&","&amp;"); //使用“&amp;”代替字符串中所有的“&”

使用QString::split()函数可以把一个字符串分成一些QStringList子串。用法:

QString str = “polluter pays principle”;
QString words = str.split(" ");//利用空格(“ ”)把字符串“polluter pays principle”分成了三个子串“polluter”、“pays”和“principle”

使用join()函数,QStringList中的项可以连接起来形成一个单一的字符串。 在每一对被连接的字符串之间都要插入join()的参数。如:str = words.join("\n"); 创建一个QStringList类对象words包含的所有字符串组成的由换行符分隔的简单字符串。

2)字节数组类QByteArray提供了一个字节数组,他可以用来存储原始字节(包括‘\0’)和传统的以‘\0’结尾的8位字符串。
QByteArray具有与QString相似的应用编程接口,但QByteArry对于存储原始的二进制数据以及8位编码的文本字符串非常有用。(一般来说,我们推荐使用QString而不是QByteArray来存储文本,因为QString支持Unicode编码)
QByteArray自动保证“最后一个项之后的项”总为“\0"(即数据以一个‘\0’结尾),因此使用QByteArray比使用const char* 要方便的多。QByteArray还支持嵌入的“\0”字符,以允许我们存储任意的二进制数据。
QByteArray::data()或QByteArray::constdata()函数可以将QByteArry转换为const char*(字符串)。用法:

printf( "User: %s\n",str.toAscii().data() );    //str.toAscii()函数返回一个 QByteArray类型

3)变量类QVariant用来处理那些能够支持不同数据类型的变量,它像是常见Qt数据类型的一个共用体,在一个时间只保存一个单一类型。QVariant类可以支持许多Qt类型的值,如:基本的C++数据类型(如double和int),QColor,QPoint,QSize和QString。QVariant类也支持容器类,如QMap<QString,QVariant>,QList<QVariant>。

可以使用toT()函数将QVariant对象转换为T类型,并获取它的值(其中T代表一种数据类型)。这里的toT()函数会复制以前的QVariant对象,然后对其进行转换,所以以前的QVariant对象并不会改变。

在项目视图类、数据库模块和QSettings中广泛使用了变量。用法:

QMap<QString,QVariant> pearMap;
pearMap["Standard"] = 1.95;
pearMap["Organic"] = 2.25;

QMap<QString,QVariant>fruitMap;
fruitMap["Orange"] = 2.10;
fruitMap["Pineapple"] = 3.85;
fruitMap["Pear"] = pearMap;

这里我们利用字符串键和 浮点数或者映射 的值创建一个映射。顶级映射包含三个键:“Orange”、“Pear”和“ Pineapple”。与“Pear”键相关联的值是一个包含两个键(“Standard”和“Organic”)的映射。

上一篇:QT学习笔记(五)https://blog.csdn.net/weixin_44787158/article/details/99108517
下一篇:QT学习笔记(七)https://blog.csdn.net/weixin_44787158/article/details/99171781

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT学习笔记(六) 的相关文章

  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod
  • 如何在qt中进行异步文件io?

    我想知道如何在qt中实现异步文件io 这在普通的 qt 中是否可以实现 或者有人需要使用另一个库 例如 libuv 来实现这样的事情 我正在查看 QDataStream 但即使它是一个 流 它也不是非阻塞的 我想一种解决方案是制作一个在内部
  • 如何将 QByteArray 转换为十六进制字符串?

    我有打击QByteArray QByteArray ba ba 0 0x01 ba 1 0x10 ba 2 0x00 ba 3 0x07 我真的不知道如何将此 QByteArray 转换为结果字符串 其中包含 01100007 我将使用 Q
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • QML:无法读取未定义的属性“xxx”

    ApplicationWindow id root property string rootName rootName visible true width 800 height 400 title qsTr WatchFace Maker
  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • Qt qDebug() 在 Windows shell 中不起作用

    我正在使用一个qDebug Qt 框架的printf屏幕上有东西 当我从 Qt Creator 运行应用程序时它工作得很好 但是当我尝试从 Windows 执行它时cmd它什么也没显示 为什么会发生这种情况 你必须添加 CONFIG con
  • 在 Qt 服务器上验证用户身份

    我正在尝试使用 C QtTcpSocket 为个人项目 多人国际象棋游戏 实现身份验证系统 我的朋友建议了一种验证用户的方法 但我想问是否有更简单或更好的方法 来自 Python 背景 做这个项目主要是为了加深对 C 的理解 我将发布我朋友
  • 如何在 OS X 上的 Qt 应用程序中设置应用程序图标,足以进行分发?

    跟进这个答案 https stackoverflow com a 20918932 368896 to 这个问题 https stackoverflow com questions 20909341 what is the fastest
  • QStyledItemDelegate 绘制自定义小部件失败

    在我的一个项目中 我使用的是QTableWidget为了显示一些复杂的计算结果 为了提高表格的可读性 我需要在单个表格单元格内显示两个对齐的值 后来我想通过使用颜色或箭头等来进一步自定义小部件 为此我源自QStyledItemDelegat
  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • Retina 显示屏中具有 QOpenGLWIdget 的 Qt MainWindow 显示错误大小

    我有一个 Qt 应用程序MainWindow 我嵌入一个QOpenGLWidget在里面 一切正常 直到我开始使用 Apple Retina 显示屏并在高 DPI 模式下运行我的应用程序 我的QOpenGLWidget只是它应该具有的大小的
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • 是否有 Qt 小部件可以浏览应用程序中小部件的层次结构(类似于 Spy++)?

    我们有一个具有复杂的小部件层次结构的应用程序 我希望能够以与 Spy 类似的方式浏览此层次结构 查看和编辑属性 例如大小 如果有一个小部件可以显示此信息 则它不需要在外部应用程序中运行 那么问题来了 这样的神兽存在吗 您可以使用Gammar
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 即使我在单独的线程中运行,QT GUI 也会冻结

    我有一个小型聊天应用程序 其中使用 SQLite 数据库来存储所有对话 我注意到该应用程序随机冻结 然后我必须最小化和最大化它才能使其再次工作 我认为问题可能是 SQLite 选择 插入导致 gui 冻结 我决定尝试将所有 SQLite 方

随机推荐

  • Docker环境安装

    Docker环境安装 Docker简介 Docker工作原理 Docker的应用场景 Docker 的优点 CentOS Docker 安装与配置 Docker 安装 Docker 配置 Docker容器概念 Docker容器操作 拉取镜像
  • Java 实现文件复制及文件夹复制

    在Java中 有多种方法可以实现文件的复制 以下是几种常用的方式 使用字节流进行复制 通过FileInputStream和FileOutputStream分别创建源文件和目标文件的输入输出流 然后通过循环读取源文件内容 并将数据写入目标文件
  • mysql相加并输出_用shell把执行的两条sql语句相加并输出数据库名和相加的值以tab健隔开...

    SELECT SUM PresentSum FROM Lg ConsumeDetail0 WHERE ConsumeDate lt 2016 11 01 AND OpId 300 SELECT SUM PresentSum FROM Lg
  • vcpu和physical cpu 绑定

    参考libvirt中xml的写法可以将vpu和物理cpu 绑定 https libvirt org formatdomain html elementsCPUTuning
  • Unity鼠标光标使用学习

    Unity下的鼠标光标程序相关的就一个类下的2 3个方法 首先 光标导入图片的设置需要将类型设置为Cursor 设置鼠标光标的方法就一个 SetCursor 第一个参数是图片 第二个参数是点击点的偏移量 第三个参数是类型 public Te
  • Apollo配置中心Client源码学习(二)-- 配置同步

    上一篇文章 https blog csdn net crystonesc article details 106630412 我们从Apollo社区给出的DEMO开始逐步分析了Apollo客户端配置的创建过程 作为Apollo配置中心Cli
  • Javascript和CSS的标签属性对应表

    在写javascript中 经常要用到style对象的css属性 很多不记得 其实很好记 基本就是CSS中的 转化为javascript的驼峰写法 除了注意下float 盒子标签和属性对照 CSS语法 不区分大小写 JavaScript语法
  • 针对博客项目进行web自动化测试

    web自动化测试针对博客项目 项目功能 测试计划 功能测试 编写测试用例 使用Selenium Junit5进行Web自动化测试 创建测试套件类 博客登录页 博客列表页 主页 博客详情页 个人博客列表页 修改密码页 编辑博客页 退出驱动 屏
  • 台达plc控制伺服电机编程实例_PPT图文讲解PLC控制系统的设计及编程实例

    今天主要是关于PLC控制系统设计 分成四个方面 以图文的形式来为大伙做讲解 一 PLC控制系统设计概述 二 PLC控制系统设计 三 PLC的安装 运行与维护 四 PLC的编程实例 一 PLC控制系统设计概述 1 系统设计的原则 2 系统设计
  • chooseAddress:fail the api need to be declared in …报错解决方法

    在app js中与pages同级添加 requiredPrivateInfos getFuzzyLocation choosePoi chooseAddress 如果提示无效的json文件 在顶部工具栏 微信开发者工具 检查更新 更新到最新
  • 一致性算法(paxos、raft)

    背景 分布式 一致性模型 1 弱一致性 最终一致性 1 1 DNS 1 1 Gossip 2 强一致性 2 1 同步 2 1 paxos 2 1 raft multi paxos 2 1 ZAB multi paxos 与raft相似 心跳
  • error C2144: 语法错误:“int”的前面应有“;”

    error C2144 语法错误 int 的前面应有 C error C2144 syntax error int should be preceded by 注 我使用VS2010时 遇到的问题 解决办法 在某个 h文件里你自定义的某个类
  • 软件工程的发展历程及展望

    软件工程发展至今 催生出了许多优秀的编程语言和编程思想 本文将带领大家一起了解软件工程经历的四个阶段 汇编语言表达业务逻辑 过程化语言表达业务逻辑 面向对象和模块化思想表达业务逻辑 服务化和组件化表达业务逻辑 最后谈一谈未来可能的发展方式
  • 刷脸支付是新奇的安全的支付体验

    扫脸支付 刷脸付钱的新奇 便利 有效率和安全的支付体验 能够大大提高客户对刷脸商品的和信赖度 刷脸不仅仅在过程中时间 还将吸引消费者注意力的时间延长了5秒到8秒右左 这几秒就会有巨大的商业价值 是让顾客同商家的经营生产有效多维 充分接触的5
  • OSI/RM七层参考模型---开放式的系统互联参考模型

    一 OSI的设计目的 OSI模型的设计目的是成为一个所有销售商都能实现的开放网路模型 来克服使用众多私有网络模型所带来的困难和低效性 OSI是在一个备受尊敬的国际标准团体的参与下完成的 这个组织就是ISO 国际标准化组织 什么是OSI OS
  • 一个很好用的 vue-picker组件

    vue picker a picker componemt for vue2 0 走了一圈 github 都没有找到自己想要的移动端的 vue picker的组件 于是自己就下手 撸了一个出来 感受下效果图 demo demo 地址 htt
  • Gradle查看第三方依赖关系图

    1 使用Android Studio Terminal 配置变量 前提是 java 和 Android Sdk配置正确 java version adb 进行验证 增加 变量名 GRADLE HOME 变量值 D gradle gradle
  • 期货开户不要过度交易

    不同状态下的心态管理 若你在昨日的交易中有所斩获 那恭喜你取得了小阶段的胜利 你可以自信而放松 但却不可忘乎所以 请记得你做出正确决策时的感觉 并重复此状态在你的下一次交易中 只有在交易时集中注意力观察行情变化 勇敢果断地应对突发变化 你才
  • 【笔记】状态同步笔记

    状态同步位置和技能 适用于fps和mmorpg类游戏 客户端A的同步阀值 减少同步量 客户端A本地会存储一份对其他客户端看到的A的预测状态 当本地真实状态和预测状态偏差超过阀值时 则发起同步 同时更新客户端A本地的预测状态 玩家运动的关键点
  • QT学习笔记(六)

    第11章 容器类 Qt提供了自己的容器类 在编写Qt程序时 既可以使用Qt容器 也可以使用STL容器 连续容器 1 向量QVector