【QT学习】-----容器类

Qt 库提供了一组通用的机遇模板的容器类,可以用来存储指定类型的项目。例如:需要一个QString类型大小可变的数组,可以使用QVector< QString >

Qt库的容器类跟STL中的容器差不多,如果了解STL,学习qt容器就照葫芦画瓢了。

顺序容器:**

  • QList< T >:使用append()、prepend()在列表的两端添加项目;insert()在中间插。
  • QLinkedList < T >:注意如果迭代器进行插入/删除操作后,迭代器失效。
  • QVector< T >
  • QStack< T >
  • QQueue< T >

关联容器:

  • QSet< T >
  • QMap< Key, T >
  • QMultiMap<Key, T>
  • QHash<Key,T>
  • QMultiHash<Key,T>

对于他们的使用,这里就不在阐述了,大家可在STL中学习,也可以在QT帮助文档查看。
大家可亲自测试:

#pragma execution_character_set("utf-8")

#include <QtCore/QCoreApplication>
#include <QList.h>
#include <QDebug>

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	QList<QString> list;
	list << "aa" << "bb" << "cc";	//插入项目
	if (list[1] == "bb")	//将"bb"变成"ab"
		list[1] = "ab";		
	list.replace(2, "bc");	//将"cc"换成“bc”
	qDebug() << "the list is:";
	for (int i = 0; i < list.size(); ++i)
	{
		qDebug() << list.at(i) << " ";	//aa ab bc
	}

	list.append("dd");	//在尾部添加   //aa ab bc dd
	list.prepend("AA");	//在头部添加	//AA aa ab bc dd
	QString str = list.takeAt(2);	//删除第三个项目   
	qDebug() << "删除了:" << str;
	qDebug() << "now the list is:";
	for (int i = 0; i < list.size(); ++i)
	{
		qDebug() << list.at(i) << " ";   // AA aa bc dd
	}

	qDebug() << "在第1个位置前插入:Aa";
	list.insert(1, "Aa");
	for (int i = 0; i < list.size(); ++i)
	{
		qDebug() << list.at(i) << " ";   // AA Aa aa bc dd
	}

	list.swap(1, 3);	//交换1,3项目
	qDebug() << "交换后";
	for (int i = 0; i < list.size(); ++i)
	{
		qDebug() << list.at(i) << " ";   // AA bc aa Aa dd
	}

	qDebug() << "包含aa???:" << " " << list.contains("aa"); //true or  false
	qDebug() << "aa的个数??:" << " " << list.count("aa");

	return a.exec();
}

在这里插入图片描述

遍历容器
遍历容器的类型:
1. Java风格

  1. [ 只读] :eg: QListIterator < T >

  2. [读写] :eg: QMutableListIterator< T >

2. STL风格

  1. [ 只读] :eg: QList< T >::const_iterator

  2. [读写] :eg: QList< T > :: iterator

eg:下面以QList为例进行加讲解:

	QList <QString> list;
	list << "AA" << "BB" << "CC" << "DD";
	QList<QString>::iterator i;		//使用读写迭代器
	qDebug() << "the list is:";
	for (i = list.begin(); i != list.end(); ++i)
		qDebug() << (*i).toLower();		//转为小写

foreach关键字
foreach是Qt向C++语言中添加的关键字,用来进行容器顺序遍历。
eg:

int main(int argc, char* argv[])
{
	QCoreApplication a(argc, argv);

	QList<QString> list;
	list.insert(0, "aa");
	list.insert(1, "bb");
	list.insert(2, "cc");
	list.insert(3, "dd");
	qDebug() << "the list is:";
	foreach(QString str, list)
		qDebug() << str;
	///---------------------
	QMap<QString, int>  map;//map中不允许有重复的键key
	map.insert("Aa",1);
	map.insert("Bb",2);
	map.insert("Cc", 3);
	qDebug() << "the map is:";
	foreach(QString str, map.keys())		//从map中获取每一个键key
	{
		qDebug() << str << ":" << map.value(str);	//输出对应的key:value
	}
	//-----------------------
	QMultiMap<QString,int> mmap;
	mmap.insert("first", 1);
	mmap.insert("first", 3);
	mmap.insert("second", 4);
	mmap.insert("third", 5);
	qDebug() << "the mmap is:";
	QList<QString> keys = mmap.uniqueKeys();	//返回所有键的列表
	foreach(QString str, keys)		//遍历所有的键
	{
		foreach(int i, mmap.values(str))	//遍历键中的所有值  //mmap.values()返回类型的QList<T>
		{
			qDebug() << str << ":" << i;
		}
	}
	return a.exec();
}

QString--------------------提供了一个Unicode字符串
1:隐式共享(/写时拷贝)
一个共享类由一个共享数据块的指针数据组成,共享数据块包含了一个引用计数。
当隐式共享类使用**“=”**操作符时就是使用浅复制,而要进行修改时才进行深复制。
主要的 隐式共享类: QByte_Array、QCursor、QFont、QPixmap、QString、QUrl、QVariant 、所有的容器类等。

2:编辑操作
常用操作跟STL中的类似

  • trimmed():除去空白字符(空白字符,不是空格)
  • simplified():除去两端和中间的空白字符。
  • QString::SkipEmptyParts//表示跳过空的条目;eg :str.split(“,” , QString:: SkipEmptyParts)//按照“,”划分多个子串。
  • append() / prepend();在字符串后面/前面添加字符或者字符串
  • replace():替换指定位置多个字符

eg:

	qDebug() << QObject::tr("一下是编辑字符串操作:");
	QString str = "hello";
	qDebug() << QObject::tr("字符串大小:") << str.size();
	str[0] = QChar('H');
	qDebug() << QObject::tr("第一个字符:") << str[0];
	str.append(" world");
	qDebug() << QObject::tr("字符串:") << str;
	str.replace(5, 1, "**");
	str += "!!!!";
	qDebug() << QObject::tr("字符串:") << str;
	str = "hi\r\n\Qt! \n";
	qDebug() << QObject::tr("字符串:") << str;

	qDebug() << "------------------------------------";
	QString str1 = str.trimmed();	//除去字符串两端的空白字符
	qDebug() << QObject::tr("str1:") << str1;
	QString str2 = str.simplified();	//除去字符串两端和中间多余的字符串
	qDebug() << QObject::tr("str2:") << str2;

	str = "h,e,ll,,o,,";	//按照“,”划分成多个子串
	QStringList list = str.split(",", QString::SkipEmptyParts);
	qDebug() << "list:" << list;

3:查询操作

  • left(5)/right(5):查询左边/右边5个字符的字符串
  • indexOf( “hh” ): 查询字符串" hh "的位置
  • mid(2,3): 包含第2个字符以后3个字符的字符串
  • startsWith(" he “) / endsWith(” he"): 判断字符串是否已 “he”开始 / 结尾
  • contains( " hehe" ): 判断是否包含“hehe”字符串

4:转换操作

  • toInt():字符串转整数
  • toFloat(): 转浮点型
  • touUpper(): 转大写
  • toLower(): 转小写
  • QString::number(num): 整数转为字符串
  • arg():函数参数可以取代字符串中相应的%1”等标记
	int age = 23;
	QString name = "yafei"; 
	QString str = "abc";
	str = QString("name is %1,age is %2").arg(name).arg(age);
	qDebug() << str;	//结果是:name is yafei,age is 23
	str = "%1 %2";
	qDebug() << str.arg("%1f", "hello");//结果是“%1f hello”
	qDebug() << str.arg("%1f").arg("hello");	//结果是hello %1f

qPrintable()函数
将字符串转换为 const char * 类。
输出字符串的时候总是有引号,所有可以用这个函数将引号去掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值