QString常用方法介绍

本文总结一下QString的常用方法,这些常用方法的接口和c++ String非常类似,下面开始进入正题:

 

Public Functions:

QString构造函数提供的接口:

QString(QChar ch);//构建单个字符串的QString

QString(int size, QChar ch);//以n个某字符构建QString

QString(const QString &other);//从已存在的QString拷贝创建

QString(QString &&other);//指向已存在的QString(两个QString对象指向同一空间)

QString(const char *str);//从char字符串创建QString

开头、结尾添加:

QString & append(const QString &str);//从末尾追加QString

QString & append(const QChar *str, int len);//从末尾追加QChar字符串

QString & append(QChar ch);//从末尾追加QChar单个字符

QString & append(const QStringRef &reference);//从末尾追加QStringRef 

QString & append(const char *str);//从末尾追加char字符串

QString & append(const QByteArray &ba);//从末尾追加QByteArray

//从开头添加,接口用法类似于append
QString & prepend(const QString &str)
QString & prepend(const QChar *str, int len)
QString & prepend(QChar ch)
QString & prepend(const QStringRef &str)
QString & prepend(const char *str)
QString & prepend(const QByteArray &ba)


//STL兼容追加函数
void push_back(const QString &other)
void push_back(QChar ch)
void push_front(const QString &other)
void push_front(QChar ch)

格式化输入:

/*
使用age方法
支持:
    QString
    qulonglong
    long
    ulong
    int
    uint
    short
    ushort
    double
    char
    QChar
    qlonglong
    QStringView
    QLatin1String


以int为例:
arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

参数1:a代表要格式化输入的10进制int值
参数2:fieldWidth指定填充a并使用字符fillChar填充的最小空间量。正值产生右对齐的文本;负值产生左对    齐的文本。
参数3:base指定格式化输入所用的进制数(2,8,10,16)
*/
QString str;
str = QString("Decimal 63 is %1 in hexadecimal")
          .arg(63, 0, 16);
// str == "Decimal 63 is 3f in hexadecimal"

str = QString("%1 %2 %3")
          .arg(12345)
          .arg(12345)
          .arg(12345, 0, 16);
// str == "12345 12,345 3039"

数字转换为字符串

QString &setNum(int n, int base = 10)
QString &setNum(ushort n, int base = 10)
QString &setNum(short n, int base = 10)
QString &setNum(uint n, int base = 10)
QString &setNum(long n, int base = 10)
QString &setNum(ulong n, int base = 10)
QString &setNum(qlonglong n, int base = 10)
QString &setNum(qulonglong n, int base = 10)
QString &setNum(float n, char format = 'g', int precision = 6)
QString &setNum(double n, char format = 'g', int precision = 6)

QString str;
str.setNum(1234);       // str == "1234"


QString str1;
str1.setNum(1234.56);       // str1 == "1234.56"

字符串转数字

double toDouble(bool *ok = nullptr) const
float toFloat(bool *ok = nullptr) const
int toInt(bool *ok = nullptr, int base = 10) const
long toLong(bool *ok = nullptr, int base = 10) const
qlonglong toLongLong(bool *ok = nullptr, int base = 10) const
uint toUInt(bool *ok = nullptr, int base = 10) const
ulong toULong(bool *ok = nullptr, int base = 10) const
qulonglong toULongLong(bool *ok = nullptr, int base = 10) const
ushort toUShort(bool *ok = nullptr, int base = 10) const
short toShort(bool *ok = nullptr, int base = 10) const


QString str = "1234.56";
double val = str.toDouble();   // val == 1234.56

取单个字符


const QChar at(int position) //等效于string[position]


QChar back() //取最后一个字符,等效于at(size() - 1)


QChar front() //取第一个字符,等效于at(0)

删除字符相关

//从末尾删除n个字符
void QString::chop(int n) 

//返回包含此字符串的size() - len最左字符的子字符串。原字符串不会被修改
QString QString::chopped(int len) const

//清除字符串内容,并使其为空
void QString::clear()

//从指定位置开始删除n个字符
QString &remove(int position, int n)

//删除此字符串中出现的所有ch字符,cs参数指定了是否对大小写敏感
QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)

//删除此字符串中出现的所有str
QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)

//删除所有满足指定正则表达式的子项
QString &remove(const QRegExp &rx)
QString &remove(const QRegularExpression &re)


QString str("LOGOUT\r\n");
str.chop(2);// str == "LOGOUT"



QString str("LOGOUT\r\n");
QString str1 = str.chop(2);// str == "LOGOUT\r\n",str1 = "LOGOUT"



QString str("LOGOUT\r\n");
str.clear()//str.isNull=true

是否包含

//是否包含某个QString
bool contains(const QString &str, Qt::CaseSensitivity cs = ...) const
//是否包含某个字符
bool contains(QChar ch, Qt::CaseSensitivity cs = ...) const
//是否包含某个拉丁字符串
bool contains(QLatin1String str, Qt::CaseSensitivity cs = ...) const
//以正则表达式的形式确定是否满足包含条件
bool contains(const QRegExp &rx) const
bool contains(QRegExp &rx) const
bool contains(const QRegularExpression &re) const
bool contains(const QRegularExpression &re, QRegularExpressionMatch *match) const

出现次数计算

//返回QString出现的次数
int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
//返回字符ch出现的次数
int count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
//返回满足正则表达式条件的内容项出现的次数
int count(const QRegExp &rx) const
int count(const QRegularExpression &re) const

指定下标获取


//参数1:目标内容(可以是QString,QChar,也可以是正则表达式)
//参数2:开始查找的位置
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 indexOf(QLatin1String str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int indexOf(const QRegExp &rx, int from = 0) const
int indexOf(QRegExp &rx, int from = 0) const
int indexOf(const QRegularExpression &re, int from = 0) const
int indexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const


QString x = "sticky question";
QString y = "sti";
x.indexOf(y);               // returns 0
x.indexOf(y, 1);            // returns 10
x.indexOf(y, 10);           // returns 10
x.indexOf(y, 11);           // returns -1


//类似于indexOf,只不过是返回最后出现的位置
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
int lastIndexOf(QLatin1String str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int lastIndexOf(const QRegExp &rx, int from = -1) const
int lastIndexOf(QRegExp &rx, int from = -1) const
int lastIndexOf(const QRegularExpression &re, int from = -1) const
int lastIndexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const

以xx结尾判断,以xxx开头判断

//判断是否以某个QString结尾
bool endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
//判断是否以某个字符结尾
bool endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

字符串填充


QString &fill(QChar ch, int size = -1)


QString str = "Berlin";
str.fill('z');
// str == "zzzzzz"

str.fill('A', 2);
// str == "AA"

插入


QString &insert(int position, const QString &str)
QString &insert(int position, const QChar *unicode, int size)
QString &insert(int position, QChar ch)
QString &insert(int position, const char *str)
QString &insert(int position, const QByteArray &str)



QString str = "Meal";
str.insert(1, QString("ontr"));
// str == "Montreal"

是否为空、是否全部小写字母、是否全部大写字母

bool isEmpty() const
bool isNull() const
bool isLower() const
bool isUpper() const



isEmpty、isNull区别

QString().isEmpty();            // returns true
QString("").isEmpty();          // returns true
QString("x").isEmpty();         // returns false
QString("abc").isEmpty();       // returns false

QString().isNull();             // returns true
QString("").isNull();           // returns false
QString("abc").isNull();        // returns false

//大多数情况下,用isEmpty较为稳妥

转换为全部大写或全部小写

QString toLower() const
QString toUpper() const

QString str = "The Qt PROJECT";
str = str.toLower();        // str == "the qt project"

左、右、中间截取

//返回包含字符串最左n个字符的子字符串。
QString left(int n) const
//返回包含字符串最左n个字符的子字符串,如果个数不够的话用fill填充空缺部分。
QString leftJustified(int width, QChar fill = QLatin1Char(' '), bool truncate = false) const
//返回对字符串最左n个字符的子字符串引用。
QStringRef leftRef(int n) const

//返回包含此字符串的size() - len最左字符的子字符串。
QString QString::chopped(int len) const

//在指定位置截断字符串,会直接修改原字符串
void QString::truncate(int position)


QString x = "Pineapple";
QString y = x.left(4);      // y == "Pine"

QString s = "apple";
QString t = s.leftJustified(8, '.');    // t == "apple..."

QString x = "Pineapple";
QStringRef y = x.leftRef(4);        // y == "Pine"



//返回从下标position开始取的n个字符串,如果n=-1,则从下标position开始取到字符串末尾
QString mid(int position, int n = -1) const
QStringRef midRef(int position, int n = -1) const

QString x = "Nine pineapples";
QString y = x.mid(5, 4);            // y == "pine"
QString z = x.mid(5);               // z == "pineapples"

QString x = "Nine pineapples";
QStringRef y = x.midRef(5, 4);      // y == "pine"
QStringRef z = x.midRef(5);         // z == "pineapples"


//用法类似于left
QString right(int n) const
//用法类似于leftJustified
QString rightJustified(int width, QChar fill = QLatin1Char(' '), bool truncate = false) const
//用法类似于leftRef
QStringRef rightRef(int n) const

根据指定项截取

//该函数首先会根据sep,将QString进行分割,然后从start开始取,取到end结束
//如果end或start为负值,则代表从右往左取
QString section(QChar sep, int start, int end = ..., QString::SectionFlags flags = SectionDefault) const


QString str;
QString csv = "forename,middlename,surname,phone";
QString path = "/usr/local/bin/myapp"; // First field is empty
QString::SectionFlag flag = QString::SectionSkipEmpty;

//[0]:"forenam"
//[1]:"middlename"
//[2]:"surname"
//[3]:"phon"
//取出开始下标为2,结束下标为2的子字符串:
//str == "surname"
str = csv.section(',', 2, 2);

//[0]:""
//[1]:"usr"
//[2]:"local"
//[3]:"bin"
//[4]:"myapp"
//取出下标为3,结束下标为4的子字符串:
//str == "bin/myapp"
str = path.section('/', 3, 4);  

//flag指明为忽略空字符串:
//[0]:"usr"
//[1]:"local"
//[2]:"bin"
//[3]:"myapp"
str = path.section('/', 3, 3, flag); // str == "myapp"

//以QString分割,其他同上
QString section(const QString &sep, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const

//以正则表达式分割,其他同上
QString section(const QRegExp &reg, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const
QString section(const QRegularExpression &re, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const

根据指定项切割

QStringList split(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList split(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList split(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const
QStringList split(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const


QString str = "a,,b,c";

QStringList list1 = str.split(',');
// list1: [ "a", "", "b", "c" ]

QStringList list2 = str.split(',', QString::SkipEmptyParts);
// list2: [ "a", "b", "c" ]

QString str = "abc";
auto parts = str.split("");
// parts: {"", "a", "b", "c", ""}

QString str = "/a/b/c/";
auto parts = str.split('/');
// parts: {"", "a", "b", "c", ""}


//用法和上面类似,返回的是QString引用
QVector<QStringRef> splitRef(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QVector<QStringRef> splitRef(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QVector<QStringRef> splitRef(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const
QVector<QStringRef> splitRef(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const

返回指定重复次数的字符串


QString repeated(int times) const

QString str("ab");
str.repeated(4);            // returns "abababab"

替换

//从指定下标开始替换
QString &replace(int position, int n, const QString &after)
QString &replace(int position, int n, const QChar *unicode, int size)
QString &replace(int position, int n, QChar after)
//单个字符替换(替换所有)
QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
//将字符串中的所有befor替换为after
QString &replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
//将字符串中的所有ch替换为after
QString &replace(QChar ch, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
//将字符串中所有符合正则表达式检索条件的字符串项替换为after
QString &replace(const QRegExp &rx, const QString &after)
QString &replace(const QRegularExpression &re, const QString &after)

交换

//用这个字符串交换字符串other。这个操作非常快,从来没有失败过。
void swap(QString &other)

转换为std::string


//std String
std::string toStdString() const

去掉开头、结尾的空格字符

QString trimmed() const


QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"

重载的运算符

!=、+、+=、<、<=、=、==、>、>=、[ ]、<<、>>

 

 

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值