QStringList

1. 初始化和基本操作

创建 QStringList 对象

 1     // 1. 默认构造函数创建空列表
 2     QStringList list1;
 3 
 4     // 2. 使用初始化列表(C++11)
 5     QStringList list2 = { "Arial","Helvetica","Times" };
 6 
 7     //3.使用 << 运算符添加元素
 8     QStringList list3;
 9     list3 << "Apple" << "Banana" << "Cherry";
10     
11     //4.从另一个QStringList 创建
12     QStringList list4(list2);
13 
14     //5.从单个字符串创建
15     QStringList list5("SingleString");

 

添加和删除元素

QStringList 提供了丰富的元素操作函数:

 

 1     QStringList fonts;
 2     fonts << "Arial" << "Helvetica"; // 初始添加
 3 
 4     //添加元素
 5     fonts.append("Times");      //末尾追加
 6     fonts.prepend("Courier");   //开头追加
 7     fonts.insert(2, "Verdana"); //指定位置插入
 8 
 9     //删除元素
10     fonts.removeAt(1);          //删除指定位置元素
11     fonts.removeOne("Times");   //删除第一个匹配元素
12     fonts.removeAll("Arial");   // 删除所有匹配元素
13     fonts.removeFirst();        // 删除第一个元素
14     fonts.removeLast();          // 删除最后一个元素
15 
16     //清空列表
17     fonts.clear();

 

2. 遍历和访问元素

QStringList 支持多种遍历方式,你可以根据场景选择最合适的:

索引遍历

 1  //索引遍历
 2 
 3  //方式1:使用at()函数(有边界检查)
 4  for (int i = 0; i < fonts.size(); i++)
 5  {
 6      QString str = fonts.at(i);
 7  }
 8 
 9  // 方式2:使用 operator[](性能更好,但需要自行确保索引有效)
10  for (int i = 0; i < fonts.size(); i++)
11  {
12      QString str = fonts[i];
13  }

迭代器遍历

 1     QStringList fonts = { "Arial", "Helvetica", "Times" };
 2 
 3     // Java 风格迭代器
 4     QStringListIterator javaITerator(fonts);
 5     while (javaITerator.hasNext())
 6     {
 7         QString str = javaITerator.next();
 8     }
 9 
10     //STL 风格迭代器
11     QStringList::const_iterator stlIterator;
12     for (stlIterator=fonts.constBegin();stlIterator!=fonts.constEnd();++stlIterator)
13     {
14         QString str = *stlIterator;
15     }
16     for (const QString& font : fonts)
17     {
18         QString str = font;
19     }

访问特定元素

1     QStringList fruits = { "Apple","Banana","Cherry" };
2 
3     QString first = fruits.first();// 第一个元素:"Apple"
4     QString last = fruits.last();        // 最后一个元素:"Cherry"
5     QString atIndex = fruits.at(1);      // 索引1的元素:"Banana"
6    
7     // 安全访问,提供默认值
8     QString value5 = fruits.value(5, "Unknown"); // 索引5不存在,返回"Unknown"
9     QString value1 = fruits.value(1, "Unknown"); // 索引1存在,返回"Banana"

 

3. 实用字符串操作

拼接和分割字符串

 1    QStringList fonts = { "Arial", "Helvetica", "Times" };
 2    QString joined = fonts.join(",");//结果:Arial,Helvetica,Times
 3 
 4    // 将字符串分割成字符串列表
 5    QString data = "Apple,Banana,Cherry";
 6    QStringList list = data.split(",");// 结果三个元素:["Apple", "Banana", "Cherry"]
 7    QStringList list1 = data.split("");//结果一个元素["Apple,Banana,Cherry"]
 8 
 9    //分割时跳过空部分
10    QString dataWithEmpty = "Apple,Banana,,Cherry";
11    //使用 Qt5.15.2  旧版本
12    //Qt5.14中,QString::SplitBehavior已经被标记为废弃,并建议使用Qt::SplitBehavior
13    QStringList list2 = data.split(",", Qt::SkipEmptyParts);
14    // 结果:["Apple", "Banana", "Cherry"]

 

过滤字符串

 1     QStringList names = { "Bill Murray", "John Doe", "Bill Clinton" };
 2 
 3     //基于子字符串过滤
 4     QStringList billNames = names.filter("Bill");
 5     // 结果:["Bill Murray", "Bill Clinton"]
 6 
 7     // 基于正则表达式过滤
 8     QStringList result = names.filter(QRegularExpression("C."));
 9     // 结果:["Bill Clinton"]
10 
11     //区分大小写的过滤
12     //CaseInsensitive(不区分大小写)
13     QStringList caseSensitiveResult1 = names.filter("bill", Qt::CaseInsensitive);
14     // 结果:["Bill Murray", "Bill Clinton"]
15     //CaseSensitive(区分大小写)
16     QStringList caseSensitiveResult2 = names.filter("bill", Qt::CaseSensitive); 
17     //结果:元素为空

 

查找和替换

    QStringList list = { "Java", "Android", "Qt Creator", "Java", "C++" };

    //查找元素
    int firstIndex = list.indexOf("Java");//返回:0
    int lastIndex = list.lastIndexOf("Java");//返回3
    bool contains1 = list.contains("Android");//结果:true
    bool contains2 = list.contains("Android2");//结果:false

    //批量替换
    QStringList files= { "$QTDIR/src/moc/moc.y", "$QTDIR/src/moc/moc.l" };
    files.replaceInStrings("$QTDIR", "123333");
    //结果:["123333/src/moc/moc.y","123333/src/moc/moc.l"]

 

4. 高级操作

排序和去重

 1 QStringList languages = {"Java", "C++", "Python", "Java", "JavaScript"};
 2 
 3 // 排序
 4 languages.sort();
 5 // 结果:["C++", "Java", "Java", "JavaScript", "Python"]
 6 
 7 // 去重
 8 int removedCount = languages.removeDuplicates();
 9 // 结果:["C++", "Java", "JavaScript", "Python"], removedCount = 1
10 
11 // 获取子列表
12 QStringList midList = languages.mid(1, 2); // 从索引1开始取2个元素

 

 

判断是否为空

 1   {
 2       QStringList stringList = { "Hello", "World" };
 3 
 4       bool IsEmpty = stringList.isEmpty();//结果是false
 5   }
 6   {
 7       QStringList stringList ;
 8 
 9       bool IsEmpty = stringList.isEmpty();//结果是true
10   }

  //元素个数

1  //元素个数
2  QStringList stringList = { "Hello", "World" };
3  int Count = stringList.size();

 

💎 核心要点

QStringList 的核心优势在于它提供了大量专为字符串操作设计的便捷方法,远比通用的 QList<QString>更加强大和易用 

posted @ 2025-11-28 15:28  家煜宝宝  阅读(2)  评论(0)    收藏  举报