Qt学习之路(2)------Qt中的字符串类

QString

QString的一些基本用法

basic.cpp

#include <QTextStream>

int main(void)
{
   QTextStream out(stdout);

   QString a = "love";

   a.append(" chess");
   a.prepend("I ");

   out << a << endl;
   out << "The a string has " << a.count()
       << " characters" << endl;

   out << a.toUpper() << endl;
   out << a.toLower() << endl;

   return 0;
}

Output

$ ./basic
I love chess
The a string has 12 characters
I LOVE CHESS
i love chess

字符串初始化

字符串有几种初始化方法

init.cpp

#include <QTextStream>

int main(void)
{
   QTextStream out(stdout);

   QString str1 = "The night train";
   out << str1 << endl;

   QString str2("A yellow rose");
   out << str2 << endl;

   std::string s1 = "A blue sky";
   QString str3 = s1.c_str();
   out << str3 << endl;

   std::string s2 = "A thick fog";
   QString str4 = QString::fromAscii(s2.data(), s2.size());
   out << str4 << endl;

   char s3[] = "A deep forest";
   QString str5(s3);
   out << str5 << endl;

   return 0;
}

Output

$ ./init
The night train
A yellow rose
A blue sky
A thick fog
A deep forest

字符串元素访问

access.cpp

#include <QTextStream>

int main(void)
{
   QTextStream out(stdout);

   QString a = "Eagle";

   out << a[0] << endl;
   out << a[4] << endl;

   out << a.at(0) << endl;

   if (a.at(5).isNull()) {
     out << "Outside the range of the string" << endl;
   }      

   return 0;
}

Output

$ ./access
E
e
E
Outside the range of the string

求字符串长度

length.cpp

#include <QTextStream>

int main()
{
  QTextStream out(stdout);

  QString s1 = "Eagle";
  QString s2 = "Eagle\n";
  QString s3 = "Eagle ";
  QString s4 = "орел";

  out << s1.length() << endl;
  out << s2.length() << endl;
  out << s3.length() << endl;
  out << s4.length() << endl;

  return 0;
}

Output

$ ./length
5
6
6
8

字符串插值

interpolation.cpp

#include <QTextStream>

int main()
{
   QTextStream out(stdout);

   QString s1 = "There are %1 white roses";
   int n = 12;

   out << s1.arg(n) << endl;

   QString s2 = "The tree is %1m high";
   double h = 5.65;

   out << s2.arg(h) << endl;

   QString s3 = "We have %1 lemons and %2 oranges";
   int ln = 12;
   int on = 4;

   out << s3.arg(ln).arg(on) << endl;

   return 0;
}

Output

$ ./interpolation
There are 12 white roses
The tree is 5.65m high
We have 12 lemons and 4 oranges

求子串

substrings.cpp

#include <QTextStream>

int main(void)
{
   QTextStream out(stdout);

   QString str = "The night train";

   out << str.right(5) << endl;
   out << str.left(9) << endl;
   out << str.mid(4, 5) << endl;

   QString str2("The big apple");
   QStringRef sub(&str2, 0, 7);

   out << sub.toString() << endl;

   return 0;
}

Output

$ ./substrings
train
The night
night
The big

Looping through strings

遍历字符串中的字符

looping.cpp

#include <QTextStream>

int main(void)
{
  QTextStream out(stdout);

  QString str = "There are many stars.";

  foreach (QChar qc, str) {
    out << qc << " ";
  }

  out << endl;

  for (QChar *it=str.begin(); it!=str.end(); ++it) {
    out << *it << " " ;
  }

  out << endl;

  for (int i = 0; i < str.size(); ++i) {
    out << str.at(i) << " ";
  }

  out << endl;

  return 0;
}

Output

$ ./looping
T h e r e   a r e   m a n y   s t a r s .
T h e r e   a r e   m a n y   s t a r s .
T h e r e   a r e   m a n y   s t a r s .

字符串比较

comparing.cpp

#include <QTextStream>

#define STR_EQUAL 0

int main(void)
{
   QTextStream out(stdout);

   QString a = "Rain";
   QString b = "rain";
   QString c = "rain\n";

   if (QString::compare(a, b) == STR_EQUAL) {
     out << "a, b are equal" << endl;
   } else {
     out << "a, b are not equal" << endl;
   }

   out << "In case insensitive comparison:" << endl;

   if (QString::compare(a, b, Qt::CaseInsensitive) == STR_EQUAL) {
     out << "a, b are equal" << endl;
   } else {
     out << "a, b are not equal" << endl;
   }     

   if (QString::compare(b, c) == STR_EQUAL) {
     out << "b, c are equal" << endl;
   } else {
     out << "b, c are not equal" << endl;
   }   

   c.chop(1);

   out << "After removing the new line character" << endl;

   if (QString::compare(b, c) == STR_EQUAL) {
     out << "b, c are equal" << endl;
   } else {
     out << "b, c are not equal" << endl;
   }            

   return 0;
}

Output

$ ./comparing
a, b are not equal
In case insensitive comparison:
a, b are equal
b, c are not equal
After removing the new line character
b, c are equal

字符串和其他类型进行转换

Output

#include <QTextStream>

int main(void)
{
  QTextStream out(stdout);

  QString s1 = "12";
  QString s2 = "15";
  QString s3, s4;

  out << s1.toInt() + s2.toInt() << endl;

  int n1 = 30;
  int n2 = 40;

  out << s3.setNum(n1) + s4.setNum(n2) << endl;

  return 0;
}

Output

$ ./converts
27
3040

字符类型

letters.cpp

#include <QTextStream>

int main(void)
{
  QTextStream out(stdout);

  int digits  = 0;
  int letters = 0;
  int spaces  = 0;
  int puncts  = 0;

  QString str = "7 white, 3 red roses.";

  foreach(QChar s, str)
  {
    if (s.isDigit()) {
      digits++;
    } else if (s.isLetter()) {
      letters++;
    } else if (s.isSpace()) {
      spaces++;
    } else if (s.isPunct()) {
      puncts++;
    }
  }  

  out << QString("There are %1 characters").arg(str.count()) << endl;
  out << QString("There are %1 letters").arg(letters) << endl;
  out << QString("There are %1 digits").arg(digits) << endl;
  out << QString("There are %1 spaces").arg(spaces) << endl;
  out << QString("There are %1 punctuation characters").arg(puncts) << endl;

  return 0;
}

Output
$ ./letters
There are 21 characters
There are 13 letters
There are 2 digits
There are 4 spaces
There are 2 punctuation characters

字符串修改

modify.cpp

#include <QTextStream>

int main(void)
{
   QTextStream out(stdout);

   QString str = "Lovely";
   str.append(" season");

   out << str << endl;

   str.remove(10, 3);
   out << str << endl;

   str.replace(7, 3, "girl");
   out << str << endl;

   str.clear();

   if (str.isEmpty()) {
     out << "The string is empty" << endl;
   }

   return 0;
}

Output

$ ./modify
Lovely season
Lovely sea
Lovely girl
The string is empty
时间: 2024-10-12 05:18:22

Qt学习之路(2)------Qt中的字符串类的相关文章

Qt 学习之路 :Qt Quick Controls

自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位.很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮.菜单等.虽然移动领域,这些组件已经变得可有可无,但在桌面系统中依然不可或缺.为了解决这一问题,Qt 5.1 发布了 Qt Quick 的一个全新模块:Qt Quick Controls.顾名思义,这个模块提供了大量类似 Qt Widgets 模块那样可重用的组件.本章我们将介绍 Qt Quick Controls,你会发现这个模块与

Qt 学习之路 :Qt 绘制系统简介

Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类. QPainter用来执行绘制的操作:QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的空间:QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口.QPaintEngine类应用于QPainter和QPaintDevice

Qt 学习之路:Qt 简介

Qt 是一个著名的 C++ 应用程序框架.你并不能说它只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个“一站式”的解决方案:不再需要研究 STL,不再需要 C++ 的<string>,不再需要到处去找解析 XML.连接数据库.访问网络的各种第三方库,因为 Qt 自己内置了这些技术. Qt 是一个跨平台的框架.跨平台 GUI 通常有三种实现策略: API 映射:API 映射是说,界面库使用同一套 API,将其映射到不同的底层平台上面.大

Qt 学习之路 :Qt 线程相关类

希望上一章有关事件循环的内容还没有把你绕晕.本章将重新回到有关线程的相关内容上面来.在前面的章节我们了解了有关QThread类的简单使用.不过,Qt 提供的有关线程的类可不那么简单,否则的话我们也没必要再三强调使用线程一定要万分小心,一不留神就会陷入陷阱. 事实上,Qt 对线程的支持可以追溯到2000年9月22日发布的 Qt 2.2.在这个版本中,Qt 引入了QThread.不过,当时对线程的支持并不是默认开启的.Qt 4.0 开始,线程成为所有平台的默认开启选项(这意味着如果不需要线程,你可以

Qt学习之路

  Qt学习之路_14(简易音乐播放器) Qt学习之路_13(简易俄罗斯方块) Qt学习之路_12(简易数据管理系统) Qt学习之路_11(简易多文档编辑器) Qt学习之路_10(Qt中statusBar,MessageBox和Timer的简单处理) Qt学习之路_9(Qt中Item Widget初步探索) Qt学习之路_8(Qt中与文件目录相关操作) Qt学习之路_7(线性布局和网格布局初步探索) Qt学习之路_6(Qt局域网聊天软件) Qt学习之路_5(Qt TCP的初步使用) Qt学习之路

QT学习之路--创建一个对话框

Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included from

QT学习之路(1):彩票绝对不中模拟器

//============================================//绝对不中,彩票开奖模拟器#include "mainwindow.h"#include "ui_mainwindow.h"#include <QHash>#include <QDebug>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::M

Qt 学习之路 2 --- 读书笔记

一.文章来由 来自豆子老师非常好的一本Qt教程,但是只有网络版,所以用这个做笔记了,不动笔墨不读书嘛~~ 二.读书笔记 1.Qt 学习之路 2(2):Qt 简介 1.1 关于 Qt 的一站式解决 Qt 是一个著名的 C++ 应用程序框架.但并不只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个"一站式"的解决方案:不再需要研究 STL,不再需要 C++ 的,不再需要到处去找解析 XML.连接数据库.访问网络的各种第三方库,因为

qt学习(一)qt三个文件函数的框架

学到点什么, 而不是复制着什么, 每天敲着别人给的代码,苦涩得改完bug, 就这样一天天的过去, 实质上并没有学到什么, 别人的思想只是拿来借鉴, 你的思想是好是坏都是你的, 不用急着抛弃自己. 从qt看看人家的思路. Qt编程思路: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~` 以下:xxx.h ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

第十一课、Qt中的字符串类

一.历史遗留的问题及解决方案 1.遗留的问题 (1).C语言不支持真正意义上的字符串 (2).C语言用字符数组和一组函数实现字符串操作 (3).C语言不支持自定义类型,因此无法获得字符串类型 2.解决方案 (1).从c到c++进化过程中引入了自定义类型 (2).在c++中可以通过类来完成字符串的定义 3.标准库STL (1).STL是意义上需要与c++一同发布的标准库 (2).STL是一套以模板技术完成的c++类库 (3).STL包含了常用的算法和数据结构 (4).STL包含了字符串类 4.Qt