看了之前大牛写的博客,发现很多函数方法在当前版本迭代中失效了,有的直接删掉,有的更新换名字了。今天写了半个下午,把常用的都整理好了。太累了~
QString用法
- 1、QString构造函数
- 2、添加字符(串) / append
- 3、添加字符(串) / +=
- 4、插入字符(串) / insert
- 5、判断是否为空、NULL
- 6、数字 -> 字符串 / QString::number
- 7、字符串 -> 数字 / toInt、toDouble、toFloat
- 8、字符串长度 / length
- 9、索引下标 / .at()
- 10、字符(串)比较 / compare
- 11、常规查找字符(串) /indexOf
- 12、反向查找字符(串) / lastIndexOf
- 13、是否包含字符串 / contains
- 14、判断开始字符 / startsWith
- 15、指定覆盖填充 / fill
- 16、选取左边开始的 n 个字符 / left
- 17、选取右边开始的 n 个字符 / right
- 18、从中选取n个字符 / mid
- 19、英文大小写转换 / toLower、toUpper
- 20、消除两端空白字符 / trimmed
- 21、将QString根据特定符号分割成QStringList / split
- 22、移除字符(串) / remove
- 23、替换字符(串) / replace
- 24、正则表达式 / .arg()
- 25、···
1、QString构造函数
QString str("hello");
QString str = QString("hello"); //效率不高,一般配用正则表达式.arg()
QString str = "hello";
2、添加字符(串) / append
//原型
inline QT_ASCII_CAST_WARN QString &append(const char *s)
{ return append(QString::fromUtf8(s)); }
//示例
QString str("hello world");
str.append("!!!");
qDebug() << str; //"hello world!!!"
3、添加字符(串) / +=
//原型
inline QT_ASCII_CAST_WARN QString &operator+=(const char *s)
{ return append(QString::fromUtf8(s)); }
//示例
QString str("hello");
str += " world";
qDebug() << str; //"hello world"
4、插入字符(串) / insert
//原型
inline QT_ASCII_CAST_WARN QString &insert(int i, const char *s)
{ return insert(i, QString::fromUtf8(s)); }
//示例
QString str("hello world!");
str.insert(str.length()-1," I like it ");
qDebug() << str; //"hello world I like it!"
5、判断是否为空、NULL
str.isNull();
str.isEmpty();
QString str;
qDebug() << str.isNull() << str.isEmpty(); //true true
QString str("");
qDebug() << str.isNull() << str.isEmpty(); //false true
6、数字 -> 字符串 / QString::number
//原型
static QString number(int, int base=10);
static QString number(uint, int base=10);
static QString number(long, int base=10);
static QString number(ulong, int base=10);
static QString number(qlonglong, int base=10);
static QString number(qulonglong, int base=10);
static QString number(double, char f='g', int prec=6);
//默认base = 10,说明是十进制转换, base在[2,36]之间
//示例
int data = 2020;
QString str = QString::number(data);
qDebug() << str; //"2020"
7、字符串 -> 数字 / toInt、toDouble、toFloat
//部分原型
short toShort(bool *ok=nullptr, int base=10) const;
ushort toUShort(bool *ok=nullptr, int base=10) const;
int toInt(bool *ok=nullptr, int base=10) const;
uint toUInt(bool *ok=nullptr, int base=10) const;
long toLong(bool *ok=nullptr, int base=10) const;
ulong toULong(bool *ok=nullptr, int base=10) const;
qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
float toFloat(bool *ok=nullptr) const;
double toDouble(bool *ok=nullptr) const;
//默认base = 10,说明是十进制转换, base在[2,36]之间
//示例
QString str("2020");
int data = str.toInt();
std::cout << data << std::endl; //2020
QString str("2020.323232");
int data = str.toInt();
std::cout << data << std::endl; //0
8、字符串长度 / length
//原型
inline int QString::length() const
{ return d->size; }
//示例
//其一
QString str("hello qt5!!!");
qDebug() << QString::number(str.length()); //"12"
//其二,根据原型返回值
QString str("hello qt5!!!");
qDebug() << QString::number(str.size()); //"12"
9、索引下标 / .at()
//原型
inline const QChar QString::at(int i) const
{ Q_ASSERT(uint(i) < uint(size())); return QChar(d->data()[i]); }
inline const QChar QString::operator[](int i) const
{ Q_ASSERT(uint(i) < uint(size())); return QChar(d->data()[i]); }
//示例
QString str("hello qt5!!!");
//其一
qDebug() << str.at(3) << str.at(4) << str.at(5); //'l' 'o' ' '
//其二,效率没有其一好
qDebug() << str[3] << str[4] << str[5]; //'l' 'o' ' '
10、字符(串)比较 / compare
//示例
int index = QString::compare("acghjh","b");
qDebug() << QString::number(index); //"-1"
int index = QString::compare("acghjh","s");
qDebug() << QString::number(index); //"-18"
//多检验几遍就会发现,其实compare就是将‘前一个字符串的第一个字符’与‘后一个字符串的第一个字符’所对应的两个ASCLL码作差并返回差值
11、常规查找字符(串) /indexOf
//原型
Q_REQUIRED_RESULT int indexOf(QStringView s, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return int(QtPrivate::findString(*this, from, s, cs)); } // ### Qt6: qsizetype
//示例
QString str("ghjsdsdgswsdgesddssdf"); //随意敲的
int flag = str.indexOf("sd"); //从0开始查找
qDebug() << QString::number(flag); //"3"
QString str("ghjsdsdgswsdgesddssdf"); //随意敲的
int flag = str.indexOf("sd",4); //从4开始查找,具体查看原型
qDebug() << QString::number(flag); //"5"
//有兴趣可以研究研究 int flag = str.indexOf("sd",-4); 的情形,并想想为什么?
12、反向查找字符(串) / lastIndexOf
//原型
Q_REQUIRED_RESULT int lastIndexOf(QStringView s, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
{ return int(QtPrivate::lastIndexOf(*this, from, s, cs)); } // ### Qt6: qsizetype
//示例
QString str("ghjsdsdgswsdgesddssdf"); //随意敲的
int flag = str.lastIndexOf("sd");
qDebug() << QString::number(flag); //"18"
QString str("ghjsdsdgswsdgesddssdf"); //随意敲的
int flag = str.lastIndexOf("sd",-4); //从最后的倒数第4个字符开始往前遍历
qDebug() << QString::number(flag); //"14"
//同样有兴趣可以试试 int flag = str.lastIndexOf("sd",4);
13、是否包含字符串 / contains
//原型
inline bool QString::contains(const QString &s, Qt::CaseSensitivity cs) const
{ return indexOf(s, 0, cs) != -1; }
//示例
QString str("ghjsdsdgswsdgesddssdf");
bool flag = str.contains('s');
qDebug() << flag; //true
14、判断开始字符 / startsWith
//示例
QString str("ghjsdsdgswsdgesddssdf");
bool flag = str.startsWith("hjs");
qDebug() << flag; //"false"
15、指定覆盖填充 / fill
//部分原型
QString &fill(QChar c, int size = -1);
//示例
QString str("hello world");
str.fill('!');
qDebug() << str; //"!!!!!!!!!!!"
QString str("hello world");
str.fill('!',4);
qDebug() << str; //"!!!!"
16、选取左边开始的 n 个字符 / left
//原型
Q_DECL_CONSTEXPR QLatin1String left(int n) const
{ return Q_ASSERT(n >= 0), Q_ASSERT(n <= size()), QLatin1String(m_data, n); }
//示例
QString str("hello world!");
QString flag = str.left(4);
qDebug() << flag; //"hell"
17、选取右边开始的 n 个字符 / right
//原型
Q_DECL_CONSTEXPR QLatin1String right(int n) const
{ return Q_ASSERT(n >= 0), Q_ASSERT(n <= size()), QLatin1String(m_data + m_size - n, n); }
//示例
QString str("hello world!!!");
str = str.right(5);
qDebug() << str; //"ld!!!"
18、从中选取n个字符 / mid
//原型
Q_DECL_CONSTEXPR QLatin1String mid(int pos) const
{ return Q_ASSERT(pos >= 0), Q_ASSERT(pos <= size()), QLatin1String(m_data + pos, m_size - pos); }
Q_DECL_CONSTEXPR QLatin1String mid(int pos, int n) const
{ return Q_ASSERT(pos >= 0), Q_ASSERT(n >= 0), Q_ASSERT(pos + n <= size()), QLatin1String(m_data + pos, n); }
//示例
QString str("hello world!!!");
str = str.mid(3); //从下标为3开始选取全部
qDebug() << str; //"lo world!!!"
QString str("hello world!!!");
str = str.mid(3,6); //从下标为3开始选取6个字符
qDebug() << str; //"lo wor"
19、英文大小写转换 / toLower、toUpper
//原型
QChar toLower() const { return QChar(*this).toLower(); }
QChar toUpper() const { return QChar(*this).toUpper(); }
//示例
QString str("Hello World!");
str = str.toLower();
qDebug() << str; //"hello world!"
str = str.toUpper();
qDebug() << str; //"HELLO WORLD!"
20、消除两端空白字符 / trimmed
//原型
Q_REQUIRED_RESULT QLatin1String trimmed() const noexcept
{ return QtPrivate::trimmed(*this); }
//示例
QString str(" hello world!!! ");
str = str.trimmed();
qDebug() << str; //"hello world!!!"
21、将QString根据特定符号分割成QStringList / split
//原型
QStringList QString::split(const QString &sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const
{ return split(sep, _sb(behavior), cs); }
QStringList QString::split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const
{ return split(sep, _sb(behavior), cs); }
//示例
QString str("I am a boy,I am a student,I am a programmer");
//用“,”做分隔符,‘,’也可,并且分割符不在分割后的成员中
QStringList list = str.split(",");
foreach(QString temp, list)
qDebug() << temp;
//"I am a boy"
//"I am a student"
//"I am a programmer"
22、移除字符(串) / remove
//部分原型
QString &remove(int i, int len);
QString &remove(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &remove(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &remove(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
//示例
QString str("hello world!!!");
str = str.remove(3,3); //从索引为3开始,删除3个字符
qDebug() << str; //"helworld!!!"
QString str("hello world!!!");
str = str.remove('l'); //删除所有字符‘l'
qDebug() << str; //"heo word!!!"
QString str("hello world!!!");
str = str.remove("ll"); //删除所有字符串“ll”
qDebug() << str; //"heo world!!!"
23、替换字符(串) / replace
//部分原型
QString &replace(int i, int len, QChar after);
QString &replace(int i, int len, const QChar *s, int slen);
QString &replace(int i, int len, const QString &after);
QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(const QChar *before, int blen, const QChar *after, int alen, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(QLatin1String before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(QLatin1String before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(const QString &before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(const QString &before, const QString &after,
Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(QChar c, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(QChar c, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
//示例
QString str("hello world!!!");
str = str.replace(2,2,"LL"); //索引2开始,替换两个字符,替换为“LL”
qDebug() << str; //"heLLo world!!!"
QString str("hello world!!!");
str = str.replace("ll","LL"); //替换找到的所有的 “ll” 为 “LL”
qDebug() << str; //"heLLo world!!!"
24、正则表达式 / .arg()
//部分原型
Q_REQUIRED_RESULT QString arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const;
//示例
QString str = QString("I am a good %1,and I like a %2 in my college.").arg("boy").arg("girl");
qDebug() << str; //"I am a good boy,and I like a girl in my college."
本文详细介绍了QString类的各种使用方法,包括构造函数、字符串拼接、插入、判断空值、数字与字符串转换、长度获取、字符索引访问、比较、查找、包含判断、字符串分割等,是Qt开发中QString操作的全面指南。
1808





