Qt学习笔记之QString

标准C++提供了 两种字符串。一是C风格的以“\0”祝福语胡额为的字符数组,二是字符串类String。详见《深入浅出之string》。

1. 字符串类QString

QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中。QString类保存了16位Unicode值,提供了丰富的操作、查询、换换等函数。该类还进行了使用隐私共享、高效的内存分配策略等多方面的优化。

Qstring();                                        // 构造空字符串
QString(QChar ch);                           // 由 QChar 对象 ch构造
QString(const QChar *pch, int size);    // 由 QChar 数组pch构造,size 是数组大小
QString(const QString &obj);              // 拷贝构造函数
QString(const char *str);                  //  由字符串 str 构造,str是一个普通字符串

2. 操作字符串

2.1 “+”操作符 

const QString operator+(const QString &s1, const QString &s2);       
const QString operator+(const QString &s1, const char *s2);
const QString operator+(const char s1, const QString &s2);
const QString operator+(const QString &s, char ch);
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello";
    str += " world";
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果是:
hello world

2.2 append函数

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

    QString str = "hello";
    str.append(" world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.3 sprintf函数

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

    QString str;
    str.sprintf("%s %s","hello","world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.4 arg函数

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

    QString str;
    str = QString("%1 %2").arg("hello").arg("world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.5 insert函数

//功能一般化的是在 QString 对象的任意位置插入另一个字符串或字符,如:
 QString &insert(int position, const QString &str);                   // 插入字符串 
 QString &insert(int position, const QChar *pch, int size);         // 插入 QChar 数组 
 QString &insert(int position, QChar ch);                               // 插入 QChar 对象
//这里 position 参数是要插入的位置,返回值也是对 QString 对象自己的引用。
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str;
    str.insert(0,"hello");
    str.insert(str.count()," world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.6 prepend函数 

 在原字符串的开头插入另一个字符串

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

    QString str;
    str.prepend(" world");
    str.prepend("hello");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
结果输出:
hello world

2.7 replace函数

//以下是 QString 对象的替换操作,这三个函数的功能是将 QString 对象从 position 开始的 n 个字符替换为新内容,新内容分别由 QString 对象、QChar 数组 和 QChar 对象表示。
 QString &replace(int position, int n, const QString &after);           // QString 对象 
 QString &replace(int position, int n, const QChar *pch, int size);  // QChar 数组 
 QString &replace(int opsition, int n, QChar after);                         // QChar 对象
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    str.replace(0,2,"world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
结果输出:
worldllo world

 2.8 remove函数

//这个函数可以移除 QString 对象中从位置 position 开始的 n 个字符,下面两个成员函数则可以从 QString 对象中移除指定的字符串或字符:
 QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive); 
 QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive);
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    str.remove(0,2);
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
llo world

 2.9 查找函数

//用以下的成员函数可以得到 QString 对象中某个特定字符串或字符出现的位置:这里参数 from 是查找的起点,它可以为负数,-i 表示倒数第i个字符。查找的方向是从前往后。返回值是查找到的字符串或字符的位置,如果没有找到则返回 -1。QString 类中还有与此功能相似的函数用于从后往前查找字符串或字符:
 int indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
 int indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

 int lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; 
 int lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

2.10 清空

//下面这个成员函数可以清空一个 QString 对象的内容,使之成为空字符串。
void clear();

 2.11 移除两端空白字符(包括回车符\n,换行符\r,制表符\t和空格符)

//下面这个成员函数可以截去 QString 对象中头部和尾部的空白字符:
//空白字符包括空格、回车、换行、制表符等字符。
QString trimmed() const;
//下面这个成员函数不仅能去掉 QString 对象头尾的空白字符,还能将中间的连续多个空白字符全部替换成一个空格:
QString simlified() const;

2.12 大小写转换

QString toLower() const;    // 转换为小写
QString toUpper() const;    // 转换为大写

2.13 截断

//而下面这个成员函数可以截断 QStrring 对象,也就是去掉指定位置后的所有内容:
void truncate(int position);      // 从位置 position 截断,位置从 0 开始编号
//下面这个成员函数可以截掉 QString 对象最后的若干个字符:
void chop(int n);     // 截掉最后的 n 个字符

 3. 查询字符串函数

 3.1 startsWith与endsWith函数

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

    QString str = "hello world";
    qDebug("%s",str.toStdString().data());
    qDebug("%d",str.contains("hello")); //! 是否以某字符串开头
    qDebug("%d",str.endsWith("world")); //! 是否以某字符串结尾

    return a.exec();
}

3.2 contains函数

//用以下的成员函数可以判断 QString 对象是否包含指定的字符串或字符
 bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;     
 bool contains(cosnt ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

3.3 比较字符串

//QString 类提供了一个函数用于两个 QString 对象的比较:
int compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive);
Qt::CaseInsensitive: //表示对大小写不敏感
Qt::Casesensitive :  //表示对大小写敏感
//返回值的含义如下:大于 0 表示 s1 大于 s2,等于 0 表示 s1 等于 s2, 小于 0 表示 s1 小于 s2

bool operator < (StringType other) const;        // 比较是否小于 other
bool operator <= (StringType other) const;      // 比较是否小于等于 other
bool operator == (StringType other) const;      // 比较是否等于 other
bool operator > (StringType other) constt;       // 比较是否大于 other
bool operator >= (StringType other) const;      // 比较是否大于等于 other
bool operator != (StringType other) const;       // 比较是否不等于 other

 4 字符串转换

 4.1 将字符串转换为其他类型

//注意: 当字符串以 0x开头时,转换的基自动转换为16, 当字符串以0开头时,转换的基自动为8。
double toDouble(bool *ok = 0) const;                                     // 转换为高精度浮点数float toFloat(bool *ok = 0) cosnt;                                          // 转换为浮点数
int toInt(bool *ok, int base = 10) const;                                 // 转换为整型数
long toLong(bool *ok, int base = 10) cosnt;                            // 转换为长整型
short toShort(bool *ok, int base = 10) const;                          // 转换为短整型
uint toUInt(bool *ok = 0; int base = 10) const                         // 转换为无符号整型数
ulong toLong(bool *ok = 0, int base = 10) const;                     // 转换为无符号长整型数 
ushort toUShort(bool *ok = 0, int base = 10) const;                 // 转换为无符号短整型数
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "123";
    qDebug("%d",str.toInt());

    return a.exec();
}
输出结果是:123

4.2 将QString类型转换为QByteArray类型

toAscii()返回一个ASCII编码的8位字符串(Qt5以上取消了)
toLatin1()返回一个Latin-1编码的8位字符串
toUtf8()返回一个Utf-8编码的8位字符串
toLocal8Bit()返回一个本地local编码字符串
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    QByteArray ba = str.toLatin1();
    qDebug("%s",ba.data());

    return a.exec();
}
输出结果:
hello world

5. 其他函数

5.1 null字符串与空字符串检测

QString().isNull()//true
QString().isEmpty()//true
QString("").isNull()//fase
QString("").isEmpty()//true

5.2 索引

//QString 类也像普通的字符串一样可以根据下标得到某个位置上的字符:
const QChar at(int position) const;
 //更直观的方法是用以下的操作符:
 const QChar operator[] (int position) const; 
 const QChar operator[] (uint position) const;
//上述QString 对象的取字符操作就类似于对一个字符数组的操作,但上述操作不能修改字符,事实上,通过[]操作符得到的字符还可以被修改,要用到另外两个重载的[]操作符:
 QCharRef operator[] (int position);
 QCharRef operator[] (uint position);  //返回的 QCharRef 类是一个辅助类,对它的修改将反映到原字符串中去。

5.3、统计

以下两个成员函数都可以得到 QString 对象中字符的个数,注意字符的个数并不一定等于字节数。
int size() const; 
int length() const;
//用以下的成员函数可以得到 QString 对象包含某个特定字符串或字符的个数:
 int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; 
 int count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
#include 
#include 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    qDebug("%d",str.size());
    qDebug("%d",str.length());
    qDebug("%d",str.count());

    return a.exec();
}
输出结果:
11
11
11

5.4 截断获取子字符串 

QString left(int n) const;      // 得到左边 n 个字符构成的子字符串
QString right(int n) const;    // 得到右边 n 个字符构成的子字符串
QString mid(int position, int n = -1) const;  // 从中间得到子字符串
//从中间得到子字符串时,参数 position 是子字符串的起始位置,参数 n 是字符串的个数,如果n 为 -1,则表示一直到原字符串的结尾。

参考资料:

1.https://www.cnblogs.com/retry/p/9328731.html#qstring-对象的比较

你可能感兴趣的:(#,Qt学习之路)