本文总结一下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 ®, 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"
重载的运算符
!=、+、+=、<、<=、=、==、>、>=、[ ]、<<、>>