QString

构造函数

QString(const QByteArray &ba)
QString(const char *str)
QString(QString &&other)
QString(const QString &other)
QString(QLatin1String str)
QString(int size, QChar ch)
QString(QChar ch)
QString(const QChar *unicode, int size = -1)
QString()

QString类从字符串转换为整数的函数

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;
qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
short  toShort(bool *ok=nullptr, int base=10) const;
ushort toUShort(bool *ok=nullptr, int base=10) const;
float toFloat(bool *ok=nullptr) const;
double toDouble(bool *ok=nullptr) const;

默认是从十进制表示的字符串转换为整数,若指定整数基参数,还可以直接将二进制、十六进制字符串转换为整数。

QString str = "1";
bool *ok;
str.toInt(ok,16);

进制转换

QString str = "111";
int val = str.toInt();//十进制
str = str.setNum(val,16); // 十六进制
str = str.setNum(val,2); // 二进制

其他常用功能

append()和prepend()
prepend()在原字符串的开头插入另一个字符串str.prepend("aaa");

append()在原字符串后面拼接字符串str.append("aaa");

toUpper()和toLower()
toUpper()字符串转换成大写str.toUpper();

toLower()字符串转换成小写str.toLower();

count()、size()、length()
返回字符串的个数。

trimmed()、simplified()
trimmed()移除字符串两端的空白字符str.trimmed();

simplified()移除字符串两端的空白字符,使用单个空格字符代替字符串中出现的空白字符str.simplified();

indexOf()、lastIndexOf()
indexOf()查找字符串出现的位置str.indexOf("a");

lastIndexOf()查找字符串最后出现的位置str.lastIndexOf("b");

isNull()、isEmpty()

都是判断字符串是否为空,如果一个空字符串只有"\0"isNull()返回falseisEmpty()返回true。
只有未赋值的字符串 isNull()才返回true

contains()
判断一个指定的字符串是否出现过,str.contains("welcome");

startWith()、endWith()

startWith()判断一个字符串是否以某个字符串开头

str.startsWith("welcome",Qt::CaseSensitive); 
Qt::CaseSensitive 区分大小写

endWith()判断一个字符串是否以某个字符串结尾

left()、right()
left()从字符串左边取多少个字符str.left(n);

right()从字符串右边取多少个字符str.right(n);

sections()
从字符串中提取以sep作为分隔符,从start到end端的字符串。

str1= str.sections(",",0,0);
str1= str.sections(",",1,1);

arg()
组合字符串。

QString str =  QString("%1 was born in % 2").arg("John").arg(2000);

比较两个字符串是否相等

QString str = QString::fromLocal8Bit("字符串")if(str.compare(QString::fromLocal8Bit("字符串") == 0){}if(str ==QString::fromLocal8Bit("字符串")){}

QByteArray

构造函数

QByteArray::QByteArray(const char *data, int size = -1)
QByteArray::QByteArray(QByteArray &&other)
QByteArray::QByteArray(const QByteArray &other)
QByteArray::QByteArray(int size, char ch)
QByteArray::QByteArray()

其他常用功能

在尾部追加数据

QByteArray &QByteArray::append(const QByteArray &ba)
QByteArray &QByteArray::append(char ch)
QByteArray x("free");
QByteArray y("dom");
x.append(y);

在头部添加数据

QByteArray &QByteArray::prepend(const QByteArray &ba)
QByteArray &QByteArray::prepend(char ch)
QByteArray x("ship");
QByteArray y("air");
x.prepend(y);

将ba插入到第i个字节位置

QByteArray &QByteArray::insert(int i, const QByteArray &ba)
QByteArray &QByteArray::insert(int i, char ch)
QByteArray ba("Meal");
ba.insert(1, QByteArray("ontr"));

删除

QByteArray &QByteArray::remove(int pos, int len)

QByteArray ba("Montreal");
ba.remove(1, 4);

删除尾部n个字节

void QByteArray::chop(int n)

QByteArray ba("STARTTLS\r\n");
ba.chop(2);                 // ba == "STARTTLS"

截断数组,前部分留下,后部分删除

void QByteArray::truncate(int pos)

QByteArray ba("Stockholm");
ba.truncate(5);             // ba == "Stock"

清空数据

void QByteArray::clear()

字符串替换

QByteArray &QByteArray::replace(const QByteArray &before, const QByteArray &after)

QByteArray ba("colour behaviour flavour neighbour");
ba.replace(QByteArray("ou"), QByteArray("o"));
// ba == "color behavior flavor neighbor"

判断是否包含子字符串
判断是否包含子字符串,包含返回true,不包含返回false

bool QByteArray::contains(char ch) const

判断字符串是否以ba开头

bool QByteArray::startsWith(const QByteArray &ba) const

判断字符串是否以ba结尾

bool QByteArray::endsWith(const QByteArray &ba) const

迭代器

QByteArray::const_iterator QByteArray::begin() const
QByteArray::const_iterator QByteArray::end() const

取出第i个数据

char QByteArray::at(int i) const

查看对象中的字符个数

int QByteArray::count() const
int QByteArray::size() const
int QByteArray::length() const

转换成char*

char *QByteArray::data()

 QByteArray ba("Hello world");
 char *data = ba.data();
 while (*data) {
     cout << "[" << *data << "]" << Qt::endl;
     ++data;
 }

QByteArray转十六进制

QByteArray QByteArray::toHex() const

转大/小写

QByteArray QByteArray::toUpper() const
QByteArray QByteArray::toLower() const

QByteArray转int

int QByteArray::toInt(bool *ok = nullptr, int base = 10) const

QString 与 QByteArray的区别

  • QString:专门用来处理字符串,支持多种编码,包括ASCII和各国语言的编码。默认情况下,QString会将所有数据视为UTF-8编码进行处理。它更高级、更抽象,并且基于Unicode字符;
  • QByteArray:用于处理字节流(字节数组的形式存储),主要处理ASCII编码字符。对于其他复杂的编码(如UTF-8),它直接以字节流的方式处理。它更底层、更具体,可视作char的替代品,并提供char数据接口;
  • QString:其基本单位是Unicode字符(QChar)。它不提供char* data()这样的接口来访问其具体存储内容,而是提供QChar* data()接口;
  • QByteArray:其基本单位是一个个字节。它提供了char* data()接口,用于访问其存储的字节;
  • QByteArray与QString之间的转换相对简单。QByteArray可以存储无法显示的字符(如0x00-0x19),而QString只存储可显示的字符(如0x30等,对应于ASCII表中的可显示字符);
  • 对于需要存储和传输数据,或者在网络编程中需要以字节流形式处理数据的场景,使用QByteArray更为合适;
  • 对于其他大多数处理字符串的场景,使用QString更为合适。
02-27 05:34