字符串类QString
- 构造函数
- 数据操作
- 字符串查找和判断
- 遍历
- 查看字节数
- 类型转换
- 字符串格式
Qt中不仅支持C, C++中的字符串类型, 而且还在框架中定义了专属的字符串类型。
C | char* |
---|---|
C++ | std::string, char* |
Qt | QByteArray, QString |
QByteArray
QString和QByteArray的函数很多都是相似的。。。
构造函数
QByteArray b("good");
QString q1();
QString q2("hello");
QString q3(b);
qDebug()<<q1;qDebug()<<q2;qDebug()<<q3;
数据操作
// 尾部追加数据
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString &QString::append(const QString &str);
QString &QString::append(const char *str);
QString &QString::append(const QByteArray &ba);
void QString::push_back(const QString &other);
// 头部添加数据
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString &QString::prepend(const QString &str);
QString &QString::prepend(const char *str);
QString &QString::prepend(const QByteArray &ba);
void QString::push_front(const QString &other);
// 插入数据, 将 str 插入到字符串第 position 个字符的位置(从0开始)
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString &QString::insert(int position, const QString &str);
QString &QString::insert(int position, const char *str);
QString &QString::insert(int position, const QByteArray &str);
// 删除数据
// 从大字符串中删除len个字符, 从第pos个字符的位置开始删除
QString &QString::remove(int position, int n);
// 从字符串的尾部删除 n 个字符
void QString::chop(int n);
// 从字节串的 position 位置将字符串截断 (前边部分留下, 后边部分被删除)
void QString::truncate(int position);
// 将对象中的数据清空, 使其为null
void QString::clear();
// 字符串替换
// 将字节数组中的 子字符串 before 替换为 after
// 参数 cs 为是否区分大小写, 默认区分大小写
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString &QString::replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
尾部追加
QString q4("hello");
q4.append("wangjianlin1");
qDebug()<<q4;
QString q5("wangjianlin2");
q4.append(q5);
qDebug()<<q4;
QByteArray q6("wangjianlin3");
q4.append(q6);
qDebug()<<q4;
头部追加
QString q7("hello");
q7.prepend("wangjianlin1");
qDebug()<<q7;
QString q8("wangjianlin2");
q7.prepend(q8);
qDebug()<<q7;
QByteArray q9("wangjianlin3");
q7.prepend(q9);
qDebug()<<q7;
插入数据
QString q10("wowo");
q10.insert(2,"hello");
qDebug()<<q10;
QString q11("xx");
QByteArray q12("aa");
q10.insert(4,q11);
qDebug()<<q10;
q10.insert(6,q12);
qDebug()<<q10;
删除数据
qDebug()<<q10;
q10.remove(2,5);
qDebug()<<q10;
q10.chop(3);
qDebug()<<q10;
q10.truncate(2);
qDebug()<<q10;
q10.clear();
qDebug()<<q10;
字符串替换
QString q15("hello");
QString q16("l");
QString q17("x");
q15.replace(q16,q17);
qDebug()<<q15;
字符串查找和判断
// 参数 cs 为是否区分大小写, 默认区分大小写
// 其他重载的同名函数可参考Qt帮助文档, 此处略
// 判断字符串中是否包含子字符串 str, 包含返回true, 否则返回false
bool QString::contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
// 判断字符串是否以字符串 ba 开始, 是返回true, 不是返回false
bool QString::startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
// 判断字符串是否以字符串 ba 结尾, 是返回true, 不是返回false
bool QString::endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
QString s1 = "hello my name is wangjianlin";
QString s2 = "my";
QString s3 = "hello";
QString s4 = "lin";
std::cout<<s1.contains(s2)<<std::endl;
std::cout<<s1.startsWith(s3)<<std::endl;;
std::cout<<s1.endsWith(s4)<<std::endl;;
std::cout<<s1.endsWith(s3)<<std::endl;
遍历
// 使用迭代器
iterator QString::begin();
iterator QString::end();
// 使用数组的方式进行遍历
// i的取值范围 0 <= position < size()
const QChar QString::at(int position) const
const QChar QString::operator[](int position) const;
QString s1 = "helloworld";
for(int i =0;i<s1.length();i++){
qDebug()<<s1.at(i);
}
查看字节数
// 返回字节数组对象中字符的个数 (字符个数和字节个数是不同的概念)
int QString::length() const;
int QString::size() const;
int QString::count() const;
// 返回字节串对象中 子字符串 str 出现的次数
// 参数 cs 为是否区分大小写, 默认区分大小写
int QString::count(const QStringRef &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
类型转换
// 将int, short, long, float, double 转换为 QString 类型
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString &QString::setNum(int n, int base = 10);
QString &QString::setNum(short n, int base = 10);
QString &QString::setNum(long n, int base = 10);
QString &QString::setNum(float n, char format = 'g', int precision = 6);
QString &QString::setNum(double n, char format = 'g', int precision = 6);
[static] QString QString::number(long n, int base = 10);
[static] QString QString::number(int n, int base = 10);
[static] QString QString::number(double n, char format = 'g', int precision = 6);
// 将 QString 转换为 int, short, long, float, double 类型
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const;
short QString::toShort(bool *ok = Q_NULLPTR, int base = 10) const;
long QString::toLong(bool *ok = Q_NULLPTR, int base = 10) const
float QString::toFloat(bool *ok = Q_NULLPTR) const;
double QString::toDouble(bool *ok = Q_NULLPTR) const;
// 将标准C++中的 std::string 类型 转换为 QString 类型
[static] QString QString::fromStdString(const std::string &str);
// 将 QString 转换为 标准C++中的 std::string 类型
std::string QString::toStdString() const;
// QString -> QByteArray
// 转换为本地编码, 跟随操作系统
QByteArray QString::toLocal8Bit() const;
// 转换为 Latin-1 编码的字符串 不支持中文
QByteArray QString::toLatin1() const;
// 转换为 utf8 编码格式的字符串 (常用)
QByteArray QString::toUtf8() const;
// 所有字符转换为大写
QString QString::toUpper() const;
// 所有字符转换为小写
QString QString::toLower() const;
将int, short, long, float, double 转换为 QString 类型
QString s1,s2,s3,s4;
int a1 = 12;short a2=12;long a3 =12;double a4 = 12.14566;
s1.setNum(a1,16);
s2.setNum(a2,16);
s3.setNum(a3,16);
s4.setNum(a4,'g',6);
qDebug()<<s1;
qDebug()<<s2;
qDebug()<<s3;
qDebug()<<s4;
将 QString 转换为 int, short, long, float, double 类型
s1 = "11";
s2 = "12";
s3 = "14";
bool ok;
int a5 = s1.toInt(&ok,10);
qDebug()<<ok<<a5;
short a6 = s2.toShort(&ok,10);
qDebug()<<ok<<a6;
long a7 = s3.toLong(&ok,10);
qDebug()<<ok<<a7;
double a8 = s4.toDouble(&ok);
qDebug()<<ok<<a8;
将标准C++中的 std::string 类型 转换为 QString 类型
std::string ss ="this";
QString a10 = QString::fromStdString(ss);
qDebug()<<a10;
QString 转换为 标准C++中的 std::string 类型
std::string ss2 =a10.toStdString();
std::cout<<ss2<<std::endl;
字符串格式
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString QString::arg(const QString &a,
int fieldWidth = 0,
QChar fillChar = QLatin1Char( ' ' )) const;
QString QString::arg(int a, int fieldWidth = 0,
int base = 10,
QChar fillChar = QLatin1Char( ' ' )) const;
// 示例程序
int i; // 假设该变量表示当前文件的编号
int total; // 假设该变量表示文件的总个数
QString fileName; // 假设该变量表示当前文件的名字
// 使用以上三个变量拼接一个动态字符串
QString status = QString("Processing file %1 of %2: %3")
.arg(i).arg(total).arg(fileName);
参考文章