本页内容

QString Class

QString 类提供了一个 Unicode 字符串。更多内容...

头文件: #include <QString>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入的。

QString 比较

类别可比较类型描述
strongQString
strongQChar、QLatin1StringView 、const char16_t *、QStringView 以及QUtf8StringView 。
strongQByteArray、QByteArrayView 以及const char *。与字节数组进行比较时,其内容将被解释为 UTF-8。

公共类型

ConstIterator
Iterator
enum NormalizationForm { NormalizationForm_D, NormalizationForm_C, NormalizationForm_KD, NormalizationForm_KC }
enum SectionFlag { SectionDefault, SectionSkipEmpty, SectionIncludeLeadingSep, SectionIncludeTrailingSep, SectionCaseInsensitiveSeps }
flags SectionFlags
const_iterator
const_pointer
const_reference
const_reverse_iterator
difference_type
iterator
pointer
reference
reverse_iterator
size_type
value_type

公共函数

QString()
QString(QCharch)
QString(QLatin1StringViewstr)
(since 6.8) QString(QStringViewsv)
QString(const QByteArray&ba)
QString(const char*str)
(since 6.1) QString(const char8_t*str)
QString(const QChar*unicode, qsizetypesize= -1)
QString(qsizetypesize, QCharch)
QString(const QString&other)
QString(QString&&other)
~QString()
QString &append(const QString&str)
QString &append(QCharch)
QString &append(QLatin1StringViewstr)
(since 6.0) QString &append(QStringViewv)
(since 6.5) QString &append(QUtf8StringViewstr)
QString &append(const QByteArray&ba)
QString &append(const char*str)
QString &append(const QChar*str, qsizetypelen)
QString arg(Args &&...args) const
QString arg(const T&a, intfieldWidth= 0, QCharfillChar= u' ') const
QString arg(Ta, int字段宽度= 0, int基数= 10, QChar填充字符= u' ') const
QString arg(Ta, int字段宽度= 0, char格式= 'g', int精度= -1, QChar填充字符= u' ') const
(since 6.6) QString &assign(QAnyStringViewv)
(since 6.6) QString &assign(InputIteratorfirst, InputIteratorlast)
(since 6.6) QString &assign(qsizetypen, QCharc)
const QChar at(qsizetypeposition) const
QChar &back()
QChar back() const
QString::iterator begin()
QString::const_iterator begin() const
qsizetype capacity() const
QString::const_iterator cbegin() const
QString::const_iterator cend() const
void chop(qsizetypen)
QString chopped(qsizetypelen) &&
QString chopped(qsizetypelen) const &
void clear()
int compare(QCharch, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
int compare(QLatin1StringViewother, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
int compare(QStringViews, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
int compare(const QString&other, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QString::const_iterator constBegin() const
const QChar *constData() const
QString::const_iterator constEnd() const
bool contains(const QRegularExpression&re, QRegularExpressionMatch*rmatch= nullptr) const
bool contains(const QString&str, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool contains(QCharch, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool contains(QLatin1StringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool contains(QStringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype count(const QString&str, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype count(const QRegularExpression&re) const
qsizetype count(QCharch, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
(since 6.0) qsizetype count(QStringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QString::const_reverse_iterator crbegin() const
QString::const_reverse_iterator crend() const
QChar *data()
const QChar *data() const
void detach()
QString::iterator end()
QString::const_iterator end() const
bool endsWith(const QString&s, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool endsWith(QCharc, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool endsWith(QLatin1StringViews, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool endsWith(QStringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
(since 6.1) QString::iterator erase(QString::const_iteratorfirst, QString::const_iteratorlast)
(since 6.5) QString::iterator erase(QString::const_iteratorit)
QString &fill(QCharch, qsizetypesize= -1)
(since 6.0) QString first(qsizetypen) &&
(since 6.0) QString first(qsizetypen) const &
QChar &front()
QChar front() const
qsizetype indexOf(QLatin1StringViewstr, qsizetypefrom= 0, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype indexOf(const QRegularExpression&re, qsizetypefrom= 0, QRegularExpressionMatch*rmatch= nullptr) const
qsizetype indexOf(const QString&str, qsizetypefrom= 0, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype indexOf(QCharch, qsizetypefrom= 0, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype indexOf(QStringViewstr, qsizetypefrom= 0, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QString &insert(qsizetypeposition, const QString&str)
QString &insert(qsizetypeposition, QCharch)
QString &insert(qsizetypeposition, QLatin1StringViewstr)
(since 6.0) QString &insert(qsizetypeposition, QStringViewstr)
(since 6.5) QString &insert(qsizetypeposition, QUtf8StringViewstr)
QString &insert(qsizetypeposition, const QByteArray&str)
QString &insert(qsizetypeposition, const char*str)
QString &insert(qsizetypeposition, const QChar*unicode, qsizetypesize)
bool isEmpty() const
bool isLower() const
bool isNull() const
bool isRightToLeft() const
bool isUpper() const
bool isValidUtf16() const
(since 6.0) QString last(qsizetypen) &&
(since 6.0) QString last(qsizetypen) const &
qsizetype lastIndexOf(const QRegularExpression&re, qsizetypefrom, QRegularExpressionMatch*rmatch= nullptr) const
qsizetype lastIndexOf(const QString&str, qsizetypefrom, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
(since 6.3) qsizetype lastIndexOf(QCharch, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
(since 6.2) qsizetype lastIndexOf(QLatin1StringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
(since 6.2) qsizetype lastIndexOf(QStringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
(since 6.2) qsizetype lastIndexOf(const QRegularExpression&re, QRegularExpressionMatch*rmatch= nullptr) const
(since 6.2) qsizetype lastIndexOf(const QString&str, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype lastIndexOf(QCharch, qsizetypefrom, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype lastIndexOf(QLatin1StringViewstr, qsizetypefrom, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
qsizetype lastIndexOf(QStringViewstr, qsizetypefrom, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QString left(qsizetypen) &&
QString left(qsizetypen) const &
QString leftJustified(qsizetypewidth, QCharfill= u' ', booltruncate= false) const
qsizetype length() const
(since 6.0) int localeAwareCompare(QStringView其他) const
int localeAwareCompare(const QString&other) const
(since 6.8) qsizetype max_size() const
QString mid(qsizetypeposition, qsizetypen= -1) &&
QString mid(qsizetype位置, qsizetypen= -1) const &
QString normalized(QString::NormalizationForm模式, QChar::UnicodeVersion版本= QChar::Unicode_Unassigned) const
(since 6.10) QString &nullTerminate()
(since 6.10) QString nullTerminated() &&
(since 6.10) QString nullTerminated() const &
QString &prepend(const QString&str)
QString &prepend(QCharch)
QString &prepend(QLatin1StringViewstr)
(since 6.0) QString &prepend(QStringViewstr)
(since 6.5) QString &prepend(QUtf8StringViewstr)
QString &prepend(const QByteArray&ba)
QString &prepend(const char*str)
QString &prepend(const QChar*str, qsizetypelen)
void push_back(const QString&other)
void push_back(QCharch)
void push_front(const QString&other)
void push_front(QCharch)
QString::reverse_iterator rbegin()
QString::const_reverse_iterator rbegin() const
QString &remove(const QRegularExpression&re)
QString &remove(QCharch, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &remove(const QString&str, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &remove(qsizetypeposition, qsizetypen)
QString &remove(QLatin1StringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive)
(since 6.5) QString &removeAt(qsizetypepos)
(since 6.5) QString &removeFirst()
(since 6.1) QString &removeIf(谓词pred)
(since 6.5) QString &removeLast()
QString::reverse_iterator rend()
QString::const_reverse_iterator rend() const
QString repeated(qsizetypetimes) const
QString &replace(qsizetypeposition, qsizetypen, const QString&after)
QString &replace(const QRegularExpression&re, const QString&after)
QString &replace(QCharbefore, QCharafter, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(QCharc, QLatin1StringViewafter, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(QCharch, const QString&after, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(QLatin1StringViewbefore, QLatin1StringViewafter, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(QLatin1StringViewbefore, const QString&after, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(const QString&before, QLatin1StringViewafter, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(const QString&before, const QString&after, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString &replace(qsizetypeposition, qsizetypen, QCharafter)
QString &replace(qsizetypeposition, qsizetypen, const QChar*after, qsizetypealen)
QString &replace(const QChar*before, qsizetypeblen, const QChar*after, qsizetypealen, Qt::CaseSensitivitycs= Qt::CaseSensitive)
void reserve(qsizetypesize)
void resize(qsizetypesize)
void resize(qsizetypenewSize, QCharfillChar)
(since 6.8) void resizeForOverwrite(qsizetypesize)
QString right(qsizetypen) &&
QString right(qsizetypen) const &
QString rightJustified(qsizetypewidth, QCharfill= u' ', booltruncate= false) const
QString section(QChar分隔符, qsizetype起始, qsizetype结束= -1, QString::SectionFlags标志= SectionDefault) const
QString section(const QRegularExpression&re, qsizetypestart, qsizetypeend= -1, QString::SectionFlagsflags= SectionDefault) const
QString section(const QString&sep, qsizetypestart, qsizetypeend= -1, QString::SectionFlagsflags= SectionDefault) const
QString &setNum(intn, intbase= 10)
QString &setNum(longn, intbase= 10)
QString &setNum(qlonglongn, intbase= 10)
QString &setNum(qulonglongn, intbase= 10)
QString &setNum(shortn, intbase= 10)
QString &setNum(uintn, intbase= 10)
QString &setNum(ulongn, intbase= 10)
QString &setNum(ushortn, intbase= 10)
QString &setNum(doublen, charformat= 'g', intprecision= 6)
QString &setNum(floatn, charformat= 'g', intprecision= 6)
QString &setRawData(const QChar*unicode, qsizetypesize)
QString &setUnicode(const QChar*unicode, qsizetypesize)
(since 6.9) QString &setUnicode(const char16_t*unicode, qsizetypesize)
(since 6.9) QString &setUtf16(const char16_t*unicode, qsizetypesize)
void shrink_to_fit()
QString simplified() const
qsizetype size() const
(since 6.8) QString &slice(qsizetypepos, qsizetypen)
(since 6.8) QString &slice(qsizetypepos)
(since 6.0) QString sliced(qsizetypepos, qsizetypen) &&
(since 6.0) QString sliced(qsizetypepos, qsizetypen) const &
(since 6.0) QString sliced(qsizetypepos) &&
(since 6.0) QString sliced(qsizetypepos) const &
QStringList split(const QString&sep, Qt::SplitBehaviorbehavior= Qt::KeepEmptyParts, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QStringList split(const QRegularExpression&re, Qt::SplitBehaviorbehavior= Qt::KeepEmptyParts) const
QStringList split(QCharsep, Qt::SplitBehaviorbehavior= Qt::KeepEmptyParts, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
void squeeze()
bool startsWith(const QString&s, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool startsWith(QCharc, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool startsWith(QLatin1StringViews, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
bool startsWith(QStringViewstr, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
void swap(QString&other)
CFStringRef toCFString() const
QString toCaseFolded() const
double toDouble(bool*ok= nullptr) const
(since 6.6) emscripten::val toEcmaString() const
float toFloat(bool*ok= nullptr) const
QString toHtmlEscaped() const
int toInt(bool*ok= nullptr, intbase= 10) const
QByteArray toLatin1() const
QByteArray toLocal8Bit() const
long toLong(bool*ok= nullptr, intbase= 10) const
qlonglong toLongLong(bool*ok= nullptr, intbase= 10) const
QString toLower() const
NSString *toNSString() const
short toShort(bool*ok= nullptr, intbase= 10) const
std::string toStdString() const
std::u16string toStdU16String() const
std::u32string toStdU32String() const
std::wstring toStdWString() const
uint toUInt(bool*ok= nullptr, intbase= 10) const
ulong toULong(bool*ok= nullptr, intbase= 10) const
qulonglong toULongLong(bool*ok= nullptr, intbase= 10) const
ushort toUShort(bool*ok= nullptr, intbase= 10) const
QList<uint> toUcs4() const
QString toUpper() const
QByteArray toUtf8() const
qsizetype toWCharArray(wchar_t*array) const
(since 6.0) auto tokenize(Needle&&sep, Flags...flags) &&
(since 6.0) auto tokenize(Needle&&sep, Flags...flags) const &&
(since 6.0) auto tokenize(Needle&&sep, Flags...flags) const &
QString trimmed() const
void truncate(qsizetypeposition)
const QChar *unicode() const
(since 6.7) operator std::u16string_view() const
QString &operator+=(const QString&other)
QString &operator+=(QCharch)
QString &operator+=(QLatin1StringViewstr)
(since 6.0) QString &operator+=(QStringViewstr)
(since 6.5) QString &operator+=(QUtf8StringViewstr)
QString &operator+=(const QByteArray&ba)
QString &operator+=(const char*str)
QString &operator=(QString&&other)
QString &operator=(const QString&other)
QString &operator=(QCharch)
QString &operator=(QLatin1StringViewstr)
QString &operator=(const QByteArray&ba)
QString &operator=(const char*str)
QChar &operator[](qsizetypeposition)
const QChar operator[](qsizetypeposition) const

静态公共成员

QString asprintf(const char*cformat, ...)
int compare(const QString&s1, const QString&s2, Qt::CaseSensitivitycs= Qt::CaseSensitive)
int compare(QLatin1StringViews1, const QString&s2, Qt::CaseSensitivitycs= Qt::CaseSensitive)
int compare(QStringViews1, const QString&s2, Qt::CaseSensitivitycs= Qt::CaseSensitive)
int compare(const QString&s1, QLatin1StringViews2, Qt::CaseSensitivitycs= Qt::CaseSensitive)
int compare(const QString&s1, QStringViews2, Qt::CaseSensitivitycs= Qt::CaseSensitive)
QString fromCFString(CFStringRefstring)
(since 6.6) QString fromEcmaString(emscripten::valjsString)
QString fromLatin1(const char*str, qsizetypesize)
(since 6.0) QString fromLatin1(QByteArrayViewstr)
QString fromLatin1(const QByteArray&str)
QString fromLocal8Bit(const char*str, qsizetypesize)
(since 6.0) QString fromLocal8Bit(QByteArrayViewstr)
QString fromLocal8Bit(const QByteArray&str)
QString fromNSString(const NSString*string)
(since 6.10) QString fromRawData(const char16_t*unicode, qsizetypesize)
QString fromRawData(const QChar*unicode, qsizetypesize)
QString fromStdString(const std::string&str)
QString fromStdU16String(const std::u16string&str)
QString fromStdU32String(const std::u32string&str)
QString fromStdWString(const std::wstring&str)
QString fromUcs4(const char32_t*unicode, qsizetypesize= -1)
QString fromUtf8(const char*str, qsizetypesize)
(since 6.0) QString fromUtf8(QByteArrayViewstr)
QString fromUtf8(const QByteArray&str)
(since 6.1) QString fromUtf8(const char8_t*str)
(since 6.0) QString fromUtf8(const char8_t*str, qsizetypesize)
QString fromUtf16(const char16_t*unicode, qsizetypesize= -1)
QString fromWCharArray(const wchar_t*string, qsizetypesize= -1)
int localeAwareCompare(const QString&s1, const QString&s2)
(since 6.0) int localeAwareCompare(QStringViews1, QStringViews2)
(since 6.8) qsizetype maxSize()
QString number(longn, intbase= 10)
QString number(doublen, charformat= 'g', intprecision= 6)
QString number(intn, intbase= 10)
QString number(qlonglongn, intbase= 10)
QString number(qulonglongn, intbase= 10)
QString number(uintn, intbase= 10)
QString number(ulongn, intbase= 10)
QString vasprintf(const char*cformat, va_listap)
(since 6.1) qsizetype erase(QString &s, const T &t)
(since 6.1) qsizetype erase_if(QString &s, Predicate pred)
bool operator!=(const QByteArray &lhs, const QString &rhs)
bool operator!=(const QString &lhs, const QString &rhs)
bool operator!=(const char *const &lhs, const QString &rhs)
bool operator!=(const QString &lhs, const QByteArray &rhs)
bool operator!=(const QString &lhs, const QLatin1StringView &rhs)
bool operator!=(const QString &lhs, const char *const &rhs)
(since 6.4) QString operator""_s(const char16_t *str, size_t size)
QString operator+(QString &&s1, const QString &s2)
(since 6.9) QString operator+(QStringView lhs, const QString &rhs)
(since 6.9) QString operator+(const QString &lhs, QStringView rhs)
QString operator+(const QString &s1, const QString &s2)
QString operator+(const QString &s1, const char *s2)
QString operator+(const char *s1, const QString &s2)
bool operator<(const QByteArray &lhs, const QString &rhs)
bool operator<(const char *const &lhs, const QString &rhs)
bool operator<(const QLatin1StringView &lhs, const QString &rhs)
bool operator<(const QString &lhs, const QByteArray &rhs)
bool operator<(const QString &lhs, const QLatin1StringView &rhs)
bool operator<(const QString &lhs, const QString &rhs)
bool operator<(const QString &lhs, const char *const &rhs)
QDataStream &operator<<(QDataStream &stream, const QString &string)
bool operator<=(const QByteArray &lhs, const QString &rhs)
bool operator<=(const QString &lhs, const QString &rhs)
bool operator<=(const char *const &lhs, const QString &rhs)
bool operator<=(const QLatin1StringView &lhs, const QString &rhs)
bool operator<=(const QString &lhs, const QByteArray &rhs)
bool operator<=(const QString &lhs, const QLatin1StringView &rhs)
bool operator<=(const QString &lhs, const char *const &rhs)
bool operator==(const QByteArray &lhs, const QString &rhs)
bool operator==(const QLatin1StringView &lhs, const QString &rhs)
bool operator==(const QString &lhs, const QByteArray &rhs)
bool operator==(const QString &lhs, const QLatin1StringView &rhs)
bool operator==(const QString &lhs, const QString &rhs)
bool operator==(const QString &lhs, const char *const &rhs)
bool operator==(const char *const &lhs, const QString &rhs)
bool operator>(const QByteArray &lhs, const QString &rhs)
bool operator>(const QString &lhs, const QString &rhs)
bool operator>(const char *const &lhs, const QString &rhs)
bool operator>(const QLatin1StringView &lhs, const QString &rhs)
bool operator>(const QString &lhs, const QByteArray &rhs)
bool operator>(const QString &lhs, const QLatin1StringView &rhs)
bool operator>(const QString &lhs, const char *const &rhs)
bool operator>=(const QByteArray &lhs, const QString &rhs)
bool operator>=(const QString &lhs, const QString &rhs)
bool operator>=(const char *const &lhs, const QString &rhs)
bool operator>=(const QLatin1StringView &lhs, const QString &rhs)
bool operator>=(const QString &lhs, const QByteArray &rhs)
bool operator>=(const QString &lhs, const QLatin1StringView &rhs)
bool operator>=(const QString &lhs, const char *const &rhs)
QDataStream &operator>>(QDataStream &stream, QString &string)

宏

QStringLiteral(str)
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
QT_RESTRICTED_CAST_FROM_ASCII
const char *qPrintable(const QString &str)
const wchar_t *qUtf16Printable(const QString &str)
const char *qUtf8Printable(const QString &str)

详细说明

QString 存储由 16 位QChar组成的字符串,其中每个QChar 对应一个 UTF-16 代码单元。(代码值大于 65535 的 Unicode 字符使用代理对(surrogate pairs)进行存储,即两个连续的QChar。)

Unicode是一项国际标准,支持当今使用的大多数书写系统。 它是 US-ASCII(ANSI X3.4-1986)和 Latin-1(ISO 8859-1)的超集,所有 US-ASCII/Latin-1 字符都位于相同的码点上。

在后台,QString使用隐式共享(写时复制)来减少内存占用,并避免不必要的数据复制。这也有助于减少存储 16 位字符(而非 8 位字符)所固有的开销。

除了 QString 之外,Qt 还提供了 `QByteArray ` 类,用于存储原始字节和传统的以 `\0` 结尾的 8 位字符串。对于大多数用途而言,QString 都是您想要使用的类。 它被广泛应用于整个 Qt API 中,其对 Unicode 的支持可确保当您日后希望拓展应用程序市场时,应用程序能够轻松实现本地化。QByteArray 适用于两种典型场景:当您需要存储原始二进制数据时,以及当内存节省至关重要时(例如在嵌入式系统中)。

初始化字符串

初始化 QString 的一种方法是向其构造函数传递一个 `const char * `。例如,以下代码创建了一个大小为 5、内容为“Hello”的 QString:

QString str = "Hello";

QString 会使用 `fromUtf8()` 函数将 `const char * ` 数据转换为 Unicode。

const char * 在所有接受const char * 参数的QString函数中,该 都会被解释为经典的C风格、以'\\0' 结尾的字符串。除非函数名称明确指明了其他编码方式,否则此类const char * 参数默认被视为UTF-8编码。

自 Qt 6.4 起,还可以使用Qt::Literals::StringLiterals::operator""_s() 和Qt::Literals::StringLiterals::operator""_L1() 字面量运算符来初始化 QString。在许多情况下,使用这些字面量会生成more efficient string construction 。

您还可以将字符串数据作为QChar数组提供:

static const QChar data[4] = {QChar(0x0055), QChar(0x006e), QChar(0x10e3), QChar(0x03a3) };
QString str(data, 4);

QString 会对QChar 数据进行深度复制,因此您后续修改时不会产生副作用。若要避免对字符数据进行深度复制,可改用QStringView 或QString::fromRawData()。

另一种方法是使用resize() 设置字符串的大小,然后逐个字符地初始化数据。 QString 采用 0 起始的索引,与 C++ 数组相同。要访问特定索引位置的字符,可以使用operator[]()。对于非const 类型的字符串,operator[]() 返回一个字符引用,该引用可在赋值语句的左侧使用。例如:

QString str;
str.resize(4);

str[0] = QChar('U');
str[1] = QChar('n');
str[2] = QChar(0x10e3);
str[3] = QChar(0x03a3);

对于只读访问,另一种语法是使用at()函数:

QString str;

for(qsizetype i= 0; i<str.size();++i) {
    if(str.at(i)>=QChar('a')&&str.at(i)<=QChar('f'))
        qDebug() << "Found character in range [a-f]";
}

at() 函数可能比operator[]() 更快,因为它不会引发深度复制。此外,还可以使用first()、last() 或sliced() 函数来一次提取多个字符。

QString 可以嵌入 '\0' 字符(QChar::Null )。size() 函数始终返回整个字符串的大小,包括嵌入的 '\0' 字符。

调用resize() 函数后,新分配的字符具有未定义的值。若要将字符串中的所有字符设置为特定值,请使用fill() 函数。

QString 提供了数十种重载方法,旨在简化字符串的使用。例如,若要将一个 QString 与字符串字面量进行比较,可以编写如下代码,其行为将符合预期:

QString str;

if (str == "auto" || str == "extern"
        || str == "static" || str == "register") {
    // ...
}

您还可以将字符串字面量传递给以 QString 为参数的函数,从而调用 QString(const char *) 构造函数。同样地,您可以通过qPrintable() 宏将 QString 传递给以const char * 为参数的函数,该宏会将给定的 QString 作为const char * 返回。这等同于调用toLocal8Bit()。constData() 操作该 QString。

字符串数据的操作

QString 提供了以下用于修改字符数据的基本函数:append()、prepend()、insert()、replace() 和remove()。例如:

QString str = "and";
str.prepend("rock ");     // str == "rock and"
str.append(" roll");        // str == "rock and roll"
str.replace(5, 3, "&");   // str == "rock & roll"

在上例中,replace() 函数的前两个参数分别是替换的起始位置和应被替换的字符数。

当数据修改函数导致字符串大小增加时,QString 可能会重新分配其存储数据的内存。此时,QString 会预先扩展出超出当前实际需求的部分,以便在字符串大小显著增加之前,无需重新分配内存即可容纳后续扩展。

对于大型字符串,insert()、remove() 以及在用不同长度的子字符串替换时使用的replace() 函数可能会运行较慢(线性时间),因为它们需要将字符串中的许多字符在内存中至少移动一个位置。

如果您正在逐步构建一个 QString,并且事先大致知道该 QString 将包含多少个字符,则可以调用reserve(),要求 QString 预分配一定量的内存。您还可以调用capacity() 来查询 QString 实际分配了多少内存。

QString 提供了STL 风格的迭代器(QString::const_iterator 和QString::iterator )。实际上,在使用 C++ 标准库提供的通用算法时,迭代器非常方便。

注意: 当调用 QString 的任何非const 方法时,QString 的迭代器 以及对其中单个字符的引用,其有效性将无法得到保证。 在调用非const 方法后访问此类迭代器或引用将导致未定义行为。当需要迭代器类功能的稳定性时,应使用索引而非迭代器,因为索引不与QString的内部状态相关联,因此不会失效。

注意:由于 隐式共享,对给定 QString 使用的第一个非const 运算符或函数可能会导致其内部对数据执行深度复制。这将使该字符串上的所有迭代器以及对其内部单个字符的引用失效。 请勿在持有迭代器时调用非 const 函数。在迭代器失效后访问该迭代器或引用会导致未定义行为。更多信息请参阅“隐式共享迭代器问题”一节。

一个常见的需求是删除或简化字符串中可见字符之间的间距。构成这些间距的字符是那些由 `isSpace()` 返回 `true` 的字符,例如普通空格 `' '`、水平制表符 `'\\t' ` 和换行符 `'\\n'`。若要获取一个省略了首尾间距的字符串副本,请使用 `trimmed()`。 若还需将字符串中的每个空格字符序列替换为单个空格(' ' ),请使用simplified()。

若要在 QString 中查找特定字符或子字符串的所有出现位置,请使用indexOf() 或lastIndexOf() 函数。前者向前搜索,后者向后搜索。两者均可指定搜索的起始索引位置。 如果找到该字符或子字符串,它们将返回其索引位置;否则,将返回 -1。例如,以下是一个用于查找特定子字符串所有出现位置的典型循环:

QString str= "We must be <b>bold</b>, very <b>bold</b>";
qsizetype j= 0;

while((j=str.indexOf("<b>",j))!=-1) {
    qDebug() << "Found <b> tag at index position" << j;
   ++j;
}

QString 提供了许多将数字转换为字符串以及将字符串转换为数字的函数。请参阅arg() 函数、setNum() 函数、number() 静态函数,以及toInt()、toDouble() 等类似函数。

若要将字符串转换为大写或小写,请使用toUpper() 或toLower()。

字符串列表由QStringList 类处理。 您可以使用split() 函数将字符串拆分为字符串列表,并使用QStringList::join() 将字符串列表拼接成一个字符串(可选分隔符)。您可以通过从字符串列表中筛选出包含特定子字符串或匹配特定QRegularExpression 的条目,从而获得过滤后的列表。详情请参阅QStringList::filter()。

查询字符串数据

要检查一个 QString 是否以特定子字符串开头或结尾,请使用startsWith() 或endsWith()。要检查 QString 是否包含特定字符或子字符串,请使用contains() 函数。要统计特定字符或子字符串在字符串中出现的次数,请使用count()。

要获取指向实际字符数据的指针,请调用data() 或constData()。这些函数返回指向QChar 数据起始位置的指针。该指针在对 QString 调用非const 函数之前,保证始终有效。

字符串比较

可以使用重载运算符(如operator<()、operator<=()、operator==()、operator>=() 等)对 QString 进行比较。 比较完全基于两个字符串作为 UTF-16 码单元序列时的字典序。这种比较速度非常快,但结果并非人类所期望的;在支持此类比较的情况下,QString::localeAwareCompare() 函数通常是排序用户界面字符串的更佳选择。

当 Qt 与 ICU 库链接时(通常如此),将使用其支持区域设置的排序功能。否则,将采用特定于平台的解决方案:

  • 在 Windows 上,localeAwareCompare() 会使用当前用户区域设置,该设置由Control Panel 中的regional 和language 选项部分决定。
  • 在 macOS 和 iOS 上,localeAwareCompare() 根据“International preferences ”面板中的“Order for sorted lists ”设置进行比较。
  • 在其他类 Unix 系统上,比较操作将回退到系统库中的strcoll() 函数。

编码字符串数据与 QString 之间的转换

QString 提供了以下函数,这些函数会将字符串转换为符合const char * 规范的QByteArray 版本:toUtf8()、toLatin1() 和toLocal8Bit()。

  • toLatin1() 返回一个采用 Latin-1(ISO 8859-1)编码的 8 位字符串。
  • toUtf8() 返回一个 UTF-8 编码的 8 位字符串。UTF-8 是 US-ASCII(ANSI X3.4-1986)的超集,通过多字节序列支持完整的 Unicode 字符集。
  • toLocal8Bit() 返回使用系统本地编码的 8 位字符串。这在 Unix 系统上等同于toUtf8()。

若要从上述编码之一进行转换,QString 提供了fromLatin1()、fromUtf8() 和fromLocal8Bit() 方法。其他编码则通过QStringEncoder 和QStringDecoder 类进行支持。

如上所述,QString 提供了许多函数和运算符,使得与const char * 字符串的互操作变得非常容易。但这一功能是一把双刃剑: 如果所有字符串均为 US-ASCII 或 Latin-1,QString 的使用会更加便捷;但始终存在这样的风险:从const char * 进行隐式转换时,可能会使用错误的 8 位编码。为了将这些风险降至最低,您可以通过定义以下某些预处理器符号来禁用这些隐式转换:

此时,您需要显式调用fromUtf8()、fromLatin1() 或fromLocal8Bit() 来从 8 位字符串构建 QString,或者使用轻量级的QLatin1StringView 类。例如:

// Required for using the '_L1' string literal.
using namespace Qt::StringLiterals;
// ...
QString url = "https://www.unicode.org/"_L1;

同样,您必须显式调用toLatin1()、toUtf8()或toLocal8Bit(),将QString转换为8位字符串。

给 C 程序员的说明
由于 C++ 的类型系统以及 QString 被隐式共享这一事实,QString 可能会被视为int或其他基本类型。例如:
QString Widget::boolToString(bool b)
{
    QString result;
    if (b)
        result = "True";
    else
        result = "False";
    return result;
}

result 变量是一个在栈上分配的普通变量。当调用return 时,由于采用按值返回,会调用复制构造函数并返回字符串的副本。得益于隐式共享,实际并未发生任何复制操作。

null 字符串与空字符串的区别

出于历史原因,QString 会区分空字符串和空指针字符串。空指针字符串是指使用 QString 的默认构造函数初始化,或通过向构造函数传递nullptr 初始化的字符串。空字符串是指大小为 0 的任何字符串。空指针字符串总是为空,但空字符串不一定是空指针字符串:

QString().isNull();               // returns true
QString().isEmpty();              // returns true

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

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

除isNull() 之外的所有函数都将空字符串与空字符串视为相同。例如,toUtf8()。对于空字符串,constData() 会返回指向字符 '\0' 的有效指针(而非nullptr )。我们建议您始终使用isEmpty() 函数,并避免使用isNull()。

数字格式

当QString::arg()'%' 格式指定符包含'L' 区域设置限定符,且基数为 10(其默认值)时,将使用默认区域设置。可通过QLocale::setDefault() 进行设置。如需更精细地控制数字的本地化字符串表示形式,请参阅QLocale::toString()。QString 执行的所有其他数字格式化操作均遵循 C 区域设置的数字表示规则。

当QString::arg()对数字应用左对齐填充时,填充字符'0' 会得到特殊处理。如果数字为负数,其负号会出现在零填充之前。如果字段经过本地化处理,则会使用符合该区域设置的零字符代替'0' 。对于浮点数,此特殊处理仅在数字为有限数时适用。

浮点数格式

在将浮点数(float 或double )格式化为字符串的成员函数(例如arg() 和number())中,可通过选择格式和精度来控制所使用的表示形式,其含义与QLocale::toString (double、char、int)中的定义一致。

如果所选格式包含指数部分,本地化格式将遵循该区域设置中关于指数位数的约定。对于非本地化格式,指数将显示其正负号,并包含至少两位数字,必要时用零从左向右补齐。

更高效的字符串构建

许多字符串在编译时已知。来自 C++ 字符串字面量的 QString 构造函数会复制字符串的内容,并将内容视为 UTF-8。这需要分配内存并重新编码字符串数据,这些操作将在运行时进行。 如果字符串数据在编译时已知,您可以使用QStringLiteral 宏或类似的operator""_s ,在编译时创建QString的负载。

使用 QString 的'+' 运算符,可以轻松地从多个子字符串构建一个复杂的字符串。您通常会编写如下代码:

// Required for using the '_L1' string literal.
using namespace Qt::StringLiterals;
// ...

    QString foo;
    QString type = "long";

    foo = "vector<"_L1 + type + ">::iterator"_L1;

    if (foo.startsWith("(" + type + ") 0x"))
        ...

这两种字符串构造方式本身并无不妥,但其中存在一些隐含的低效之处:

首先,重复使用'+' 运算符可能会导致多次内存分配。在拼接n个子字符串时(其中n > 2),内存分配器可能会被调用多达n - 1次。

这些内存分配可通过一个名为QStringBuilder 的内部类进行优化。该类被标记为内部类,且未在文档中出现,因为您不应在代码中对其进行实例化。如下文所述,该类的使用将是自动进行的。

QStringBuilder 该类使用表达式模板并重写了'%' 运算符,因此当你使用'%' 进行字符串连接(而非'+' )时,多个子字符串的连接操作会被推迟,直到最终结果即将被赋值给一个QString。此时,最终结果所需的内存量已确定。 随后,内存分配器将被调用一次以获取所需空间,然后将子字符串逐个复制到该空间中。

通过内联和减少引用计数进一步提高了效率(由QStringBuilder 创建的QString引用计数为1,而QString::append()则需要额外进行一次测试)。

您可以通过两种方式使用这种改进后的字符串构建方法。最直接的方式是在需要使用QStringBuilder 的任何地方包含该文件,并在连接字符串时使用'%' 运算符代替'+' :

    #include <QStringBuilder>

    QString hello("hello");
    QStringView el = QStringView{ hello }.sliced(2, 3);
    QString message =  hello % el % "world"_L1 % QChar('!');

一种更全局的方法——虽然更方便但并非完全源代码兼容——是在构建时定义QT_USE_QSTRINGBUILDER (通过将其添加到编译器标志中)。这样,使用'+' 进行字符串拼接将与QStringBuilder's 产生相同的效果'%' 。

注意: 当启用 QStringBuilder 时,若对 字符串连接的结果使用自动 类型推导(例如通过使用auto 关键字),将显示该连接结果确实是 QStringBuilder 特化类的实例:

    QString str("QStringBuilder");

    // "s" type is deduced as QStringBuilder<...>
    auto s = "Like hot glue, " % str % " concatenates strings";

    // Similarly the return type of this lambda is deduced as QStringBuilder<...>
    auto concatenateStr = []() {
        return "Like hot glue, " % str % " concatenates strings";
    };

这不会造成任何问题,因为 QStringBuilder 会在需要时隐式转换为 QString。如果希望避免这种情况,则应显式指定所需类型,而不是让编译器进行推导:

    QString s = "Like hot glue, " % str % " concatenates strings";

    // With a lambda, specify a trailing return type:
    auto concatenateStr = []() -> QString {
        return "Like hot glue, " % str % " concatenates strings";
    };

最大大小和内存不足情况

QString 的最大大小取决于系统架构。大多数 64 位系统可以分配超过 2 GB 的内存,典型限制为 2^63 字节。实际值还取决于管理数据块所需的开销。 因此,在 32 位平台上,其最大大小通常为 2 GB 减去开销;在 64 位平台上,则为 2^63 字节减去开销。QString 中可存储的元素数量等于该最大大小除以 `QChar` 的大小。

当内存分配失败时,如果应用程序是在支持异常的情况下编译的,QString 会抛出std::bad_alloc 异常。Qt 容器中的内存不足情况是 Qt 会抛出异常的唯一情形。如果禁用了异常,则内存不足将导致未定义行为。

注意:目标 操作系统可能会对应用程序可分配的总内存量或单次分配的大小施加限制。这可能会进一步限制 QString 所能容纳的字符串大小。缓解或控制这些限制所导致的行为超出了 Qt API 的范围。

另请参阅 “应使用哪个字符串类?”、fromRawData()、QChar 、QStringView 、QLatin1StringView 以及QByteArray 。

成员类型文档

QString::ConstIterator

QString::const_iterator 的 Qt 风格同义词。

QString::Iterator

QString::iterator 的 Qt 风格同义词。

enum QString::NormalizationForm

该枚举描述了Unicode文本的各种规范化形式。

常量值描述
QString::NormalizationForm_D0规范分解
QString::NormalizationForm_C1规范分解后接规范组合
QString::NormalizationForm_KD2兼容性分解
QString::NormalizationForm_KC3先进行兼容性分解,再进行规范组合

另请参阅 normalized() 以及《Unicode标准附录第15号》。

enum QString::SectionFlag
flags QString::SectionFlags

此枚举指定了可用于影响section()函数在分隔符和空字段方面的行为的标志。

常量值描述
QString::SectionDefault0x00空字段会被计入,前缀和后缀分隔符不被计入,并且分隔符的比较区分大小写。
QString::SectionSkipEmpty0x01将空字段视为不存在,即在确定起始和结束位置时,不将其考虑在内。
QString::SectionIncludeLeadingSep0x02将前导分隔符(如有)包含在结果字符串中。
QString::SectionIncludeTrailingSep0x04将尾部分隔符(如有)包含在结果字符串中。
QString::SectionCaseInsensitiveSeps0x08不区分分隔符的大小写进行比较。

SectionFlags 类型是QFlags<SectionFlag> 的 typedef。它存储 SectionFlag 值的 OR 组合。

另请参阅 section()。

QString::const_iterator

另请参阅 QString::iterator 。

QString::const_pointer

QString::const_pointer 类型别名提供了一个指向QString 元素的 STL 风格的 const 指针(QChar )。

QString::const_reference

QString::const_reverse_iterator

另请参阅 QString::reverse_iterator 和QString::const_iterator 。

QString::difference_type

QString::iterator

另请参阅 QString::const_iterator 。

QString::pointer

QString::pointer 类型别名提供了一个指向 `QString ` 元素的 STL 风格指针(QChar )。

QString::reference

QString::reverse_iterator

另请参阅 QString::const_reverse_iterator 和QString::iterator 。

QString::size_type

QString::value_type

成员函数文档

[constexpr noexcept] QString::QString()

构建一个空字符串。空字符串也被视为空的。

另请参阅 isEmpty(),isNull() 以及Distinction Between Null and Empty Strings 。

QString::QString(QChar ch)

构建一个长度为 1 的字符串,其中包含字符ch 。

QString::QString(QLatin1StringView str)

构建由str 处理的Latin-1字符串的副本。

另请参阅 fromLatin1()。

[explicit, since 6.8] QString::QString(QStringView sv)

构建一个初始化为字符串视图数据的字符串。

当且仅当sv 为空时,QString才会为空。

该函数在 Qt 6.8 中引入。

另请参阅 fromUtf16()。

QString::QString(const QByteArray &ba)

构建一个由字节数组ba 初始化的字符串。给定的字节数组将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此构造函数。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr()处理,此方法便十分有用。

注意: 字节数组中的任何 空字节('\0')都将被包含在此字符串中,并转换为 Unicode 空字符(U+0000)。此行为与 Qt 5.x 不同。

另请参阅 fromLatin1()、fromLocal8Bit() 和fromUtf8()。

QString::QString(const char *str)

构建一个由 8 位字符串 `str` 初始化的字符串。给定的 `const char` 指针将通过 `fromUtf8()` 函数转换为 Unicode。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此构造函数。例如,如果您希望确保所有用户可见的字符串都通过QObject::tr() 进行转换,此方法会非常有用。

注意:定义 `QT_RESTRICTED_CAST_FROM_ASCII ` 也会禁用此构造函数,但会启用一个 `QString(const char (&ch)[N]) ` 构造函数。在此情况下,使用非字面量输入、包含嵌入 NUL 字符的输入或非 7 位字符的输入,其行为未定义。

另请参阅 fromLatin1()、fromLocal8Bit() 和fromUtf8()。

[since 6.1] QString::QString(const char8_t *str)

构建一个初始化为 UTF-8 字符串str 的字符串。给定的 const char8_t 指针将通过fromUtf8() 函数转换为 Unicode。

该函数在 Qt 6.1 中引入。

另请参阅 fromLatin1()、fromLocal8Bit() 和fromUtf8()。

[explicit] QString::QString(const QChar *unicode, qsizetype size = -1)

构建一个字符串,该字符串初始化为数组unicode 中前size 个字符。QChar

如果unicode 为 0,则构建一个空字符串。

如果size 为负数,则假定unicode 指向一个以 '\0' 结尾的数组,并动态确定其长度。结尾的空字符不被视为字符串的一部分。

QString 会对字符串数据进行深度复制。Unicode 数据将原样复制,如果存在字节顺序标记(BOM),则予以保留。

另请参阅 fromRawData()。

QString::QString(qsizetype size, QChar ch)

根据给定的size 构建一个字符串,其中每个字符均设置为ch 。

另请参阅 fill()。

[noexcept] QString::QString(const QString &other)

创建other 的副本。

此操作耗时为常数时间,因为 QString 是隐式共享的。这使得从函数中返回 QString 非常快。如果共享的实例被修改,它将被复制(写时复制),而这需要线性时间。

另请参阅 operator=()。

[noexcept default] QString::QString(QString &&other)

通过移动赋值构造一个 QString 实例,使其指向与 `other ` 所指向的同一对象。

[noexcept] QString::~QString()

销毁该字符串。

QString &QString::append(const QString &str)

将字符串str 追加到该字符串的末尾。

示例:

QString x = "free";
QString y = "dom";

x.append(y);
// x == "freedom"

这与使用insert() 函数的效果相同:

x.insert(x.size(), y);

append() 函数通常运行非常快(常数时间),因为QString 会在字符串数据末尾预先分配额外空间,从而使其能够动态扩展,而无需每次都重新分配整个字符串。

另请参阅 operator+=()、prepend() 和insert()。

QString &QString::append(QChar ch)

将字符ch 追加到该字符串后。

该函数重载了QString::append() 函数。

QString &QString::append(QLatin1StringView str)

将str 所处理的Latin-1字符串追加到此字符串后。

此函数重载了QString::append()。

[since 6.0] QString &QString::append(QStringView v)

将给定的字符串视图v 追加到该字符串末尾,并返回结果。

此函数重载了QString::append()。

该函数在 Qt 6.0 中引入。

[since 6.5] QString &QString::append(QUtf8StringView str)

将 UTF-8 字符串视图 `str ` 追加到此字符串后。

此函数重载了QString::append()。

该函数自 Qt 6.5 起引入。

QString &QString::append(const QByteArray &ba)

将字节数组ba 追加到此字符串后。给定的字节数组将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此函数。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr()处理,这将非常有用。

该函数重载了QString::append()。

QString &QString::append(const char *str)

将字符串str 追加到该字符串末尾。给定的 const char 指针将通过fromUtf8() 函数转换为 Unicode。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此函数。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,此方法会很有用。

该函数重载了QString::append()。

QString &QString::append(const QChar *str, qsizetype len)

将QChar 数组str 中的字符len 追加到此字符串中。

此函数重载了QString::append()。

template <typename... Args> QString QString::arg(Args &&... args) const

将该字符串中所有出现的%N 替换为args 中的对应参数。这些参数不按位置排序:args 中的第一个参数将%N 替换为最小的N (所有该值),args 中的第二个参数将%N 替换为次小的N ,以此类推。

Args 可以由任何能隐式转换为QAnyStringView 的内容组成。

注意:在 Qt 6.9 之前的版本中,QAnyStringView 以及 UTF-8 字符串(QUtf8StringView 、QByteArray 、QByteArrayView 、const char8_t* 等)不被支持作为args 。

另请参阅 QString::arg()。

template <typename T> requires if_string_like<T> QString QString::arg(const T &a, int fieldWidth = 0, QChar fillChar = u' ') const

返回该字符串的副本,其中编号最小的占位符被替换为字符串a ,即%1 、%2 、...、%99 。

fieldWidth 指定a 应占用的最小空间。如果a 所需的空间小于fieldWidth ,则使用字符fillChar 将其补足至fieldWidth 。正值fieldWidth 将生成右对齐文本,负值fieldWidth 将生成左对齐文本。

以下示例演示了如何创建一个status 字符串,用于在处理文件列表时报告进度:

int i;                // current file's number
int total;            // number of files to process
QStringView fileName; // current file's name

QString status = QString("Processing file %1 of %2: %3")
                .arg(i).arg(total).arg(fileName);

首先,arg(i) 替换了%1 。然后arg(total) 替换了%2 。最后,arg(fileName) 替换了%3 。

与asprintf() 相比,使用 arg() 的一个优势在于:如果应用程序的字符串被翻译成其他语言,编号占位符的顺序可能会发生变化,但每个 arg() 仍会替换编号最小的未被替换的占位符,无论它出现在何处。 此外,如果字符串中出现多个编号为%i 的占位符,arg() 会将它们全部替换。

如果不再有未替换的占位符,则会打印一条警告消息,且结果未定义。占位符编号必须在 1 到 99 之间。

注意:在 Qt 6.9 之前的版本中,该函数在以下参数上被重载:char 、QChar 、QString 、QStringView 和QLatin1StringView ;在某些情况下,wchar_t 和char16_t 参数会被解析为整数重载。在 Qt 5.10 之前的版本中,该函数缺少QStringView 和QLatin1StringView 重载。

template <typename T> requires if_integral_non_char<T> QString QString::arg(T a, int fieldWidth = 0, int base = 10, QChar fillChar = u' ') const

a 参数采用基数base 表示,其默认值为 10,且必须在 2 到 36 之间。对于 10 以外的基数,a 将被视为无符号整数。

fieldWidth 指定将 `a ` 补齐至的最小长度,并用字符 `fillChar` 填充。正值将产生右对齐的文本;负值将产生左对齐的文本。

'%' 后面可以跟一个 'L',在这种情况下,该序列将被替换为a 的本地化表示形式。转换使用由QLocale::setDefault() 设置的默认区域设置。如果未指定默认区域设置,则使用系统区域设置。如果base 不是 10,则忽略 'L' 标志。

QString str;
str = QString("Decimal 63 is %1 in hexadecimal")
        .arg(63, 0, 16);
// str == "Decimal 63 is 3f in hexadecimal"

QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
str = QString("%1 %L2 %L3")
        .arg(12345)
        .arg(12345)
        .arg(12345, 0, 16);
// str == "12345 12,345 3039"

注意:在 Qt 6.10.1 之前的版本中,该函数接受可隐式转换为整数类型的参数。除(无作用域的)枚举类型外,此功能现已不再受支持,因为它还接受可转换为浮点类型的参数,当这些参数作为整数打印时会导致精度损失。 一种向后兼容的修复方法是将此类类型强制转换为显示形式符合您意图的 C++ 类型(int 、float 等)。

注意:在 Qt 6.9 之前的版本中,该函数对各种整数类型进行了重载,有时会错误地接受char 和char16_t 类型的参数。

该函数重载了QString::arg()。

另请参阅 Number formats 。

template <typename T> requires if_floating_point<T> QString QString::arg(T a, int fieldWidth = 0, char format = 'g', int precision = -1, QChar fillChar = u' ') const

参数 `a ` 将根据指定的 `format ` 和 `precision` 进行格式化。详情请参阅Floating-point Formats 。

fieldWidth 指定将 `a ` 补齐至的最小长度,并用字符 `fillChar` 填充。正值将生成右对齐文本;负值将生成左对齐文本。

double d = 12.34;
QString str = QString("delta: %1").arg(d, 0, 'E', 3);
// str == "delta: 1.234E+01"

注意:在 Qt 6.9 之前的版本中,此函数是一个接受double 参数的普通函数。由于现在它已成为模板函数,因此不再接受仅能隐式转换为浮点类型的参数。一种向后兼容的解决方法是将此类类型强制转换为 C++ 浮点类型之一。

该函数重载了 `QString::arg()`。

另请参见 QLocale::toString()、QLocale::FloatingPointPrecisionOption 以及Number formats 。

[static] QString QString::asprintf(const char *cformat, ...)

根据格式字符串cformat 和一组任意的参数,安全地构建一个格式化字符串。

该格式字符串支持标准 C++ 库中 printf() 函数提供的转换指定符、长度修饰符和标志。cformat 字符串和%s 参数必须采用 UTF-8 编码。

注意: %lc 转义序列期望接收 类型为char16_t (由QChar::unicode() 返回)或ushort 的 Unicode 字符。%ls 转义序列期望接收指向类型为char16_t 或ushort (由 QString::utf16() 返回)的零终止 Unicode 字符数组的指针。 这与标准 C++ 库中的 printf() 不一致,后者定义了%lc 用于打印 wchar_t,%ls 用于打印wchar_t* ,并且在wchar_t 的大小不是 16 位的平台上,还可能会引发编译器警告。

警告:我们不 建议在新编写的 Qt 代码中使用 QString::asprintf()。建议改用QTextStream 或arg(),这两者都能无缝支持 Unicode 字符串,并且是类型安全的。以下是一个使用QTextStream 的示例:

QString result;
QTextStream(&result) << "pi = " << 3.14;
// result == "pi = 3.14"

对于translations ,特别是当字符串中包含多个转义序列时,应考虑改用arg() 函数。这样可以由翻译人员控制替换的顺序。

另请参阅 arg()。

[since 6.6] QString &QString::assign(QAnyStringView v)

将该字符串的内容替换为v 的副本,并返回该字符串的引用。

该字符串的大小将等于v 的大小,并被转换为 UTF-16 编码,如同通过v.toString() 处理一般。不过,与QAnyStringView::toString() 不同,此函数仅在估计大小超过该字符串的容量或该字符串为共享字符串时才分配内存。

该函数在 Qt 6.6 中引入。

另请参阅 QAnyStringView::toString()。

[since 6.6] template <typename InputIterator> requires if_compatible_iterator<InputIterator> QString &QString::assign(InputIterator first, InputIterator last)

将该字符串的内容替换为迭代器范围 [first,last) 中元素的副本,并返回对该字符串的引用。

该字符串的大小将等于范围 [first,last) 中元素的解码长度,这并不一定与范围本身的长度相同,因为该函数会将输入字符集透明地重新编码为 UTF-16。

只有当范围中的元素个数(对于非 UTF-16 编码的输入,则是结果字符串的最大可能大小)超过该字符串的容量,或者该字符串是共享的,此函数才会分配内存。

注意: 如果任一参数是指向 *this 的迭代器,或者 [first,last) 不是一个有效的范围,则行为 未定义。

约束

仅当InputIterator 满足LegacyInputIterator的要求,且InputIterator 的value_type 属于以下字符类型之一时,才参与重载解析:

  • QChar
  • QLatin1Char
  • char
  • unsigned char
  • signed char
  • char8_t
  • char16_t
  • (在 Windows 等平台上,该类型为 16 位类型)wchar_t
  • char32_t

该函数在 Qt 6.6 中引入。

[since 6.6] QString &QString::assign(qsizetype n, QChar c)

将该字符串的内容替换为n 个c 的副本,并返回该字符串的引用。

该字符串的大小将等于n ,该值必须为非负数。

只有当n 超过该字符串的容量或该字符串是共享的时,此函数才会分配内存。

该函数在 Qt 6.6 中引入。

另请参阅 fill()。

const QChar QString::at(qsizetype position) const

返回字符串中位于指定索引位置position 处的字符。

position 必须是字符串中的有效索引位置(即 0 <=position <size())。

另请参阅 operator[]()。

QChar &QString::back()

返回字符串中最后一个字符的引用。与operator[](size() - 1) 相同。

提供此函数是为了兼容 STL。

警告: 对空字符串调用 此函数将导致未定义行为。

另请参阅 front()、at() 和operator[]()。

QChar QString::back() const

返回字符串中的最后一个字符。与at(size() - 1) 相同。

提供此函数是为了与 STL 兼容。

警告: 对空字符串调用 此函数将导致未定义行为。

另请参见 front()、at() 和operator[]()。

QString::iterator QString::begin()

返回一个指向字符串中第一个字符的STL 风格迭代器。

警告: 当与QString 脱离或 被修改时,返回的迭代器将失效。

另请参阅 constBegin() 和end()。

QString::const_iterator QString::begin() const

该函数重载了QString::begin()。

qsizetype QString::capacity() const

返回字符串中可存储的最大字符数,且不会强制进行内存重新分配。

此函数的唯一目的是为精细调整QString 的内存使用提供一种手段。通常情况下,您几乎不需要调用此函数。若要了解字符串中包含多少个字符,请调用size()。

注意: 静态分配的字符串将报告容量为 0,即使它并非空字符串 。

注意: 在已分配的内存块中,空闲空间的位置是未定义的。换言之,不应假设空闲内存总是位于已初始化元素之后。

另请参阅 reserve() 和squeeze()。

QString::const_iterator QString::cbegin() const

返回一个指向字符串中第一个字符的常量STL 风格迭代器。

警告: 当脱离上下文或修改QString 时,返回的迭代器将失效。

另请参阅 begin() 和cend()。

QString::const_iterator QString::cend() const

返回一个指向字符串中最后一个字符之后位置的常量STL 风格迭代器。

警告: 当该迭代器与字符串脱离,或对QString 进行修改时,所返回的迭代器 将失效。

另请参阅 cbegin() 和end()。

void QString::chop(qsizetype n)

从字符串末尾删除n 个字符。

如果n 大于或等于size(),则结果为空字符串;如果n 为负数,则等同于传入零。

示例:

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

若要从字符串开头移除字符,请改用remove()。

另请参阅 truncate()、resize()、remove() 和QStringView::chop()。

QString QString::chopped(qsizetype len) &&

QString QString::chopped(qsizetype len) const &

返回一个字符串,其中包含该字符串最左侧的size() -len 个字符。

注意: 如果len 为负数或大于size(),则行为 未定义。

另请参阅 endsWith()、first()、last()、sliced()、chop()、truncate() 和slice()。

void QString::clear()

清空字符串的内容并将其设为空。

另请参阅 resize() 和isNull()。

[static noexcept] int QString::compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将字符串s1 与字符串s2 进行比较,如果s1 小于s2 ,则返回负整数;如果大于s2 ,则返回正整数;如果两者相等,则返回零。

如果cs 设置为Qt::CaseSensitive (默认值),则比较区分大小写;否则,比较不区分大小写。

区分大小写的比较完全基于字符的 Unicode 数值,速度非常快,但这并非人类所期望的结果。请考虑使用localeAwareCompare() 对用户可见的字符串进行排序。

int x = QString::compare("aUtO", "AuTo", Qt::CaseInsensitive);  // x == 0
int y = QString::compare("auto", "Car", Qt::CaseSensitive);     // y > 0
int z = QString::compare("auto", "Car", Qt::CaseInsensitive);   // z < 0

注意:该 函数将空字符串与空字符串视为等同,更多详情请参阅Distinction Between Null and Empty Strings 。

另请参阅 operator==()、operator<()、operator>() 以及Comparing Strings 。

[noexcept] int QString::compare(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

使用大小写敏感设置cs ,将此内容与ch 进行比较。

该函数重载了QString::compare()。

[noexcept] int QString::compare(QLatin1StringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

与 compare(*this,other,cs) 相同。

该函数重载了QString::compare()。

[noexcept] int QString::compare(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

使用大小写敏感设置cs ,将此内容与s 进行比较。

该函数重载了QString::compare() 函数。

[noexcept] int QString::compare(const QString &other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

按字典顺序将该字符串与字符串other 进行比较,若该字符串小于other ,则返回一个负整数;若大于other ,则返回一个正整数;若两者相等,则返回零。

与 compare(*this,other,cs) 相同。

该函数重载了QString::compare()。

[static noexcept] int QString::compare(QLatin1StringView s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

使用大小写敏感设置cs 对s1 和s2 进行比较。

该函数重载了QString::compare()。

[static noexcept] int QString::compare(QStringView s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

该函数重载了QString::compare()。

[static noexcept] int QString::compare(const QString &s1, QLatin1StringView s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

使用大小写敏感设置cs ,对s1 和s2 进行比较。

该函数重载了QString::compare() 函数。

[static noexcept] int QString::compare(const QString &s1, QStringView s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)

该函数重载了QString::compare()。

QString::const_iterator QString::constBegin() const

返回一个指向字符串中第一个字符的 constSTL 风格迭代器。

警告: 当脱离上下文或修改 `QString ` 时,返回的迭代器将失效。

另请参阅 begin() 和constEnd()。

const QChar *QString::constData() const

返回指向QString 中存储的数据的指针。该指针可用于访问构成该字符串的字符。

请注意,该指针仅在字符串未被修改时才有效。

注意: 返回的字符串可能不以 '\0' 结尾。请使用size() 来确定数组的长度。

另请参阅 data()、operator[]() 和fromRawData()。

QString::const_iterator QString::constEnd() const

返回一个指向字符串中最后一个字符之后位置的常量STL 风格迭代器。

警告: 当该迭代器与字符串脱离,或QString 被修改时,所返回的迭代器将失效。

另请参阅 constBegin() 和end()。

bool QString::contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const

如果正则表达式 `re ` 与该字符串中的某处匹配,则返回 `true `;否则返回 `false`。

如果匹配成功,且 `rmatch ` 不是 `nullptr`,它还会将匹配结果写入由 `rmatch` 所指向的 `QRegularExpressionMatch ` 对象中。

另请参阅 QRegularExpression::match()。

bool QString::contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果该字符串中包含字符串str ,则返回true ;否则返回false 。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

QString str = "Peter Pan";
str.contains("peter", Qt::CaseInsensitive);    // returns true

另请参阅 indexOf() 和count()。

bool QString::contains(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果该字符串中包含字符ch ,则返回true ;否则返回false 。

该函数重载了QString::contains()。

bool QString::contains(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果该字符串中包含 latin-1 字符串str ,则返回true ;否则返回false 。

该函数重载了QString::contains() 函数。

[noexcept] bool QString::contains(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果该字符串中包含字符串视图str ,则返回true ;否则返回false 。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

此函数重载了QString::contains()。

另请参阅 indexOf() 和count()。

qsizetype QString::count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回该字符串中字符串str 的出现次数(可能存在重叠)。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

另请参阅 contains() 和indexOf()。

qsizetype QString::count(const QRegularExpression &re) const

返回正则表达式re 在字符串中匹配的次数。

出于历史原因,此函数会统计重叠的匹配,因此在下例中,“ana”或“ama”共出现四次:

QString str = "banana and panama";
str.count(QRegularExpression("a[nm]a"));    // returns 4

这种行为与使用QRegularExpressionMatchIterator 简单地遍历字符串中的匹配项不同。

该函数重载了QString::count()。

另请参阅 QRegularExpression::globalMatch()。

qsizetype QString::count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符ch 在字符串中的出现次数。

如果 `cs ` 为 `Qt::CaseSensitive `(默认值),则搜索区分大小写;否则,搜索不区分大小写。

此函数重载了QString::count() 函数。

另请参阅 contains() 和indexOf()。

[since 6.0] qsizetype QString::count(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回该字符串中字符串视图str 的出现次数(可能包含重叠)。

如果 `cs ` 为 `Qt::CaseSensitive `(默认值),则搜索区分大小写;否则,搜索不区分大小写。

此函数重载了QString::count()。

该函数在 Qt 6.0 中引入。

另请参阅 contains() 和indexOf()。

QString::const_reverse_iterator QString::crbegin() const

返回一个指向字符串中第一个字符(按反向顺序)的常量STL 风格反向迭代器。

警告: 当脱离上下文或修改QString 时,返回的迭代器将失效。

另请参阅 begin()、rbegin() 和rend()。

QString::const_reverse_iterator QString::crend() const

返回一个常量STL 风格的反向迭代器,该迭代器指向字符串中最后一个字符之后的第一个位置,且按反向顺序排列。

警告: 当脱离容器或修改QString 时,返回的迭代器将失效。

另请参阅 end()、rend() 和rbegin()。

QChar *QString::data()

返回指向QString 中存储的数据的指针。该指针可用于访问和修改构成该字符串的字符。

与constData()和unicode()不同,返回的数据始终以'\0'结尾。

示例:

QString str= "Hello world";
QChar*data =str.data();
while(!data->isNull()) {
    qDebug() << data->unicode();
   ++data;
}

请注意,该指针仅在字符串未通过其他方式被修改的情况下才保持有效。对于只读访问,constData() 的执行速度更快,因为它绝不会引发深度拷贝。

另请参阅 constData() 和operator[]()。

const QChar *QString::data() const

注意: 返回的字符串可能并非以“\0 ”结尾。请使用size() 来确定数组的长度。

这是一个重载函数。

另请参阅 fromRawData()。

void QString::detach()

确保该字符串的数据不再与其他实例共享。

QString::iterator QString::end()

返回一个STL 风格的迭代器,该迭代器指向字符串中最后一个字符之后的第一个位置。

警告: 当该迭代器与字符串脱离,或QString 发生修改时,返回的迭代器 将失效。

另请参阅 begin() 和constEnd()。

QString::const_iterator QString::end() const

该函数重载了QString::end()。

bool QString::endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果字符串以s 结尾,则返回true ;否则返回false 。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

QString str = "Bananas";
str.endsWith("anas");         // returns true
str.endsWith("pple");         // returns false

另请参阅 startsWith()。

bool QString::endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果字符串以“c ”结尾,则返回true ;否则返回false 。

该函数重载了QString::endsWith()。

bool QString::endsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

该函数重载了QString::endsWith()。

[noexcept] bool QString::endsWith(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果字符串以字符串视图str 结尾,则返回true ;否则返回false 。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

此函数重载了QString::endsWith()。

另请参阅 startsWith()。

[since 6.1] QString::iterator QString::erase(QString::const_iterator first, QString::const_iterator last)

从字符串中移除半开放区间 [first,last ) 内的字符。返回一个迭代器,该迭代器指向最后一个被删除字符之后的字符(即删除操作发生前由last 所指向的字符)。

该函数于 Qt 6.1 中引入。

[since 6.5] QString::iterator QString::erase(QString::const_iterator it)

从字符串中删除由it 表示的字符。返回指向被删除字符之后紧邻的字符的迭代器。

QString c = "abcdefg";
auto it = c.erase(c.cbegin()); // c is now "bcdefg"; "it" points to "b"

这是一个重载函数。

该函数于 Qt 6.5 中引入。

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

将字符串中的每个字符设置为字符ch 。如果size 不等于-1(默认值),则会预先将字符串调整为size 的大小。

示例:

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

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

另请参阅 resize()。

[since 6.0] QString QString::first(qsizetype n) &&

[since 6.0] QString QString::first(qsizetype n) const &

返回一个字符串,其中包含该字符串的前n 个字符(即从该字符串开头起,直到索引位置为n 的元素处,但不包括该元素本身)。

注意: 当n < 0 或n >size() 时,行为未定义。

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

这些函数在 Qt 6.0 中引入。

另请参见 last()、sliced()、startsWith()、chopped()、chop()、truncate()以及slice()。

[static] QString QString::fromCFString(CFStringRef string)

创建一个新的QString ,其中包含string 中CFString的副本。

注意:此 函数仅在 macOS 和 iOS 上可用。

[static, since 6.6] QString QString::fromEcmaString(emscripten::val jsString)

将ECMAScript 字符串 jsString 转换为QString 。如果提供的参数不是字符串,则行为未定义。

该函数在 Qt 6.6 中引入。

另请参阅 toEcmaString()。

[static] QString QString::fromLatin1(const char *str, qsizetype size)

返回一个QString ,该对象使用拉丁-1字符串str 的前size 个字符进行初始化。

如果size 为-1 ,则改用strlen(str) 。

另请参阅 toLatin1()、fromUtf8() 和fromLocal8Bit()。

[static, since 6.0] QString QString::fromLatin1(QByteArrayView str)

返回一个用 Latin-1 字符串str 初始化的QString 。

注意: 字节数组中的任何空字节('\0')都将包含在此字符串中,并转换为 Unicode 空字符(U+0000)。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[static] QString QString::fromLatin1(const QByteArray &str)

返回一个用 Latin-1 字符串str 初始化的QString 。

注意: 字节数组中的任何空字节('\0')都会被包含在此字符串中,并转换为 Unicode 空字符(U+0000)。此行为与 Qt 5.x 不同。

这是一个重载函数。

[static] QString QString::fromLocal8Bit(const char *str, qsizetype size)

返回一个QString ,该对象使用8位字符串str 的前size 个字符进行初始化。

如果size 的值为-1 ,则改用strlen(str) 。

在 Unix 系统上,这等同于fromUtf8()。请注意,在 Apple 系统上,此函数不会考虑NSString.defaultCStringEncoding或CFStringGetSystemEncoding(),因为这些函数通常返回旧式的“Western (Mac OS Roman)”编码,而该编码不应在现代 Apple 操作系统上使用。 在 Windows 系统上,将使用系统当前的代码页。

另请参阅 toLocal8Bit()、fromLatin1() 和fromUtf8()。

[static, since 6.0] QString QString::fromLocal8Bit(QByteArrayView str)

返回一个使用 8 位字符串str 初始化的 `QString `。

在 Unix 系统上,这等同于fromUtf8()。请注意,在 Apple 系统上,此函数不会考虑NSString.defaultCStringEncoding或CFStringGetSystemEncoding()的返回值,因为这些函数通常会返回旧式的“Western (Mac OS Roman)”编码,而该编码不应在现代 Apple 操作系统上使用。 在 Windows 上,将使用系统当前的代码页。

注意: 字节数组中的任何空字节('\0')都将被包含在此字符串中,并转换为 Unicode 空字符(U+0000)。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[static] QString QString::fromLocal8Bit(const QByteArray &str)

返回一个使用 8 位字符串str 初始化的 `QString `。

在 Unix 系统上,这等同于fromUtf8()。请注意,在 Apple 系统上,此函数不会考虑NSString.defaultCStringEncoding或CFStringGetSystemEncoding()的返回值,因为这些函数通常会返回旧式的“Western (Mac OS Roman)”编码,而该编码在现代 Apple 操作系统上不应使用。 在 Windows 上,将使用系统当前的代码页。

注意: 字节数组中的任何空字节('\0')都将被包含在此字符串中,并转换为 Unicode 空字符(U+0000)。此行为与 Qt 5.x 不同。

这是一个重载函数。

[static] QString QString::fromNSString(const NSString *string)

创建一个新的QString ,其中包含string NSString的副本。

注意:此 函数仅在 macOS 和 iOS 上可用。

[static, since 6.10] QString QString::fromRawData(const char16_t *unicode, qsizetype size)

构建一个QString ,该对象使用数组unicode 中的前size 个Unicode字符。unicode 中的数据不会被复制。调用方必须能够保证,只要QString (或其未被修改的副本)存在,unicode 就不会被删除或修改。

任何试图修改QString 或其副本的行为,都会导致系统创建数据的深拷贝,从而确保原始数据不会被修改。

以下是一个示例,展示了如何在内存中对原始数据使用QRegularExpression ,而无需将数据复制到QString 中:

QRegularExpression pattern("\u00A4");
static const char16_t unicode[] = {
        0x005A, 0x007F, 0x00A4, 0x0060,
        0x1009, 0x0020, 0x0020};

QString str = QString::fromRawData(unicode, std::size(unicode));
if (str.contains(pattern)) {
    // ...
}

警告: 除非原始数据在位置size 处包含字符'\0',否则使用fromRawData()创建的字符串 不会以'\0'结尾。这意味着unicode()不会返回以'\0'结尾的字符串(尽管utf16()会返回,但需要复制原始数据)。

该函数在 Qt 6.10 中引入。

另请参阅 fromUtf16()、setRawData()、data()、constData()、nullTerminate() 以及nullTerminated()。

[static] QString QString::fromRawData(const QChar *unicode, qsizetype size)

这是一个重载函数。

[static] QString QString::fromStdString(const std::string &str)

返回str 字符串的副本。该字符串默认采用UTF-8编码,并将通过fromUtf8()函数转换为QString 格式。

另请参阅 fromLatin1()、fromLocal8Bit()、fromUtf8() 以及QByteArray::fromStdString()。

[static] QString QString::fromStdU16String(const std::u16string &str)

返回str 字符串的副本。假定给定的字符串采用UTF-16编码,并使用fromUtf16()函数将其转换为QString 。

另请参阅 fromUtf16()、fromStdWString() 和fromStdU32String()。

[static] QString QString::fromStdU32String(const std::u32string &str)

返回str 字符串的副本。假定给定的字符串采用UTF-32编码,并使用fromUcs4()函数将其转换为QString 。

另请参阅 fromUcs4()、fromStdWString(),以及fromStdU16String()。

[static] QString QString::fromStdWString(const std::wstring &str)

返回字符串str 的副本。如果 wchar_t 的大小为 2 字节(例如在 Windows 上),则假定给定的字符串采用 utf16 编码;如果 wchar_t 的大小为 4 字节(大多数 Unix 系统),则假定采用 ucs4 编码。

另请参阅 fromUtf16()、fromLatin1()、fromLocal8Bit()、fromUtf8()、fromUcs4()、fromStdU16String()以及fromStdU32String()。

[static] QString QString::fromUcs4(const char32_t *unicode, qsizetype size = -1)

返回一个QString ,该对象使用Unicode字符串unicode (以UTF-32编码)的前size 个字符进行初始化。

如果size 为 -1(默认值),则unicode 必须以 '\0' 结尾。

另请参阅 toUcs4()、fromUtf16()、utf16()、setUtf16()、fromWCharArray(),以及fromStdU32String()。

[static] QString QString::fromUtf8(const char *str, qsizetype size)

返回一个使用 UTF-8 字符串str 的前size 字节初始化的 `QString ` 对象。

如果size 为-1 ,则改用strlen(str) 。

UTF-8 是一种 Unicode 编码,可以表示 Unicode 字符串(如QString )中的所有字符。但是,UTF-8 中可能会出现无效序列,如果发现此类序列,它们将被一个或多个“替换字符”替换,或者被抑制。 这些包括非 Unicode 序列、非字符、过长序列或编码为 UTF-8 的代理码点。

只要所有 UTF-8 字符都在传入数据中被正确终止,即可使用此函数对传入数据进行增量处理。字符串末尾的任何未终止字符都将被替换或忽略。若要进行带状态的解码,请使用QStringDecoder 。

另请参阅 toUtf8()、fromLatin1() 和fromLocal8Bit()。

[static, since 6.0] QString QString::fromUtf8(QByteArrayView str)

返回一个用 UTF-8 字符串str 初始化的QString 对象。

注意: 字节数组中的任何空字节('\0')都会被包含在此字符串中,并转换为 Unicode 空字符(U+0000)。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[static] QString QString::fromUtf8(const QByteArray &str)

返回一个用 UTF-8 字符串str 初始化的QString 对象。

注意: 字节数组中的任何空字节('\0')都会被包含在此字符串中,并转换为 Unicode 空字符(U+0000)。此行为与 Qt 5.x 不同。

这是一个重载函数。

[static, since 6.1] QString QString::fromUtf8(const char8_t *str)

此重载仅在以 C++20 模式编译时可用。

这是一个重载函数。

该函数在 Qt 6.1 中引入。

[static, since 6.0] QString QString::fromUtf8(const char8_t *str, qsizetype size)

此重载仅在以 C++20 模式编译时可用。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

[static] QString QString::fromUtf16(const char16_t *unicode, qsizetype size = -1)

返回一个QString ,其初始化值为Unicode字符串unicode (采用ISO-10646-UTF-16编码)的前size 个字符。

如果size 为 -1(默认值),则unicode 必须以 '\0' 结尾。

该函数会检查字节顺序标记(BOM)。如果缺失,则假定为宿主字节顺序。

与其他 Unicode 转换相比,此函数速度较慢。如果可能,请使用QString(constQChar *, qsizetype) 或QString(constQChar *)。

QString 对 Unicode 数据进行深度复制。

另请参阅 utf16()、setUtf16() 和fromStdU16String()。

[static] QString QString::fromWCharArray(const wchar_t *string, qsizetype size = -1)

读取由string 指向的wchar_t 数组中的前size 个代码单元,将其转换为Unicode,并将结果作为QString 返回。如果该类型的大小为4字节,则假定wchar_t 使用的编码为UTF-32;如果其大小为2字节,则假定为UTF-16。

如果size 为 -1(默认值),则string 必须以 '\0' 结尾。

另请参阅 fromUtf16()、fromLatin1()、fromLocal8Bit()、fromUtf8()、fromUcs4() 以及fromStdWString()。

QChar &QString::front()

返回字符串中第一个字符的引用。与operator[](0) 相同。

提供此函数是为了兼容 STL。

警告: 对空字符串调用 此函数将导致未定义行为。

另请参阅 back()、at() 和operator[]()。

QChar QString::front() const

返回字符串中的第一个字符。与at(0) 相同。

提供此函数是为了兼容 STL。

警告: 对空字符串调用 此函数将导致未定义行为。

另请参见 back()、at() 和operator[]()。

qsizetype QString::indexOf(QLatin1StringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回该字符串中由 `str ` 解析的 Latin-1 字符串首次出现的位置索引,从索引位置 `from` 开始向前搜索。若未找到 `str `,则返回 -1。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

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

如果from 为 -1,则从最后一个字符开始搜索;如果为 -2,则从倒数第二个字符开始,依此类推。

另请参阅 lastIndexOf()、contains() 和count()。

qsizetype QString::indexOf(const QRegularExpression &re, qsizetype from = 0, QRegularExpressionMatch *rmatch = nullptr) const

返回正则表达式re 在字符串中首次匹配的索引位置,从索引位置from 开始向前搜索。如果re 没有任何匹配,则返回 -1。

如果匹配成功,且rmatch 并非nullptr ,则还会将匹配结果写入由rmatch 指向的QRegularExpressionMatch 对象中。

示例:

QString str = "the minimum";
str.indexOf(QRegularExpression("m[aeiou]"), 0);       // returns 4

QRegularExpressionMatch match;
str.indexOf(QRegularExpression("m[aeiou]"), 0, &match);       // returns 4
// match.captured() == mi

qsizetype QString::indexOf(const QString &str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串中首次出现“str ”的索引位置,从索引位置from 开始向前搜索。如果未找到str ,则返回-1。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

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

如果from 为 -1,则从最后一个字符开始搜索;如果为 -2,则从倒数第二个字符开始,依此类推。

另请参阅 lastIndexOf()、contains() 和count()。

qsizetype QString::indexOf(QChar ch, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符ch 在此字符串中首次出现的位置索引,从索引位置from 开始向前搜索。如果未找到ch ,则返回-1。

此函数重载了QString::indexOf() 函数。

[noexcept] qsizetype QString::indexOf(QStringView str, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串中首次出现字符串视图str 的索引位置,从索引位置from 开始向前搜索。如果未找到str ,则返回 -1。

如果cs 等于Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

如果from 为 -1,则从最后一个字符开始搜索;如果为 -2,则从倒数第二个字符开始,以此类推。

此函数重载了QString::indexOf()。

另请参阅 QStringView::indexOf()、lastIndexOf()、contains() 和count()。

QString &QString::insert(qsizetype position, const QString &str)

在给定索引position 处插入字符串str ,并返回该字符串的引用。

示例:

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

该字符串会自动扩展以容纳插入内容。如果position 超出了字符串末尾,则会在字符串末尾追加空格字符以达到该position 位置,随后再追加str 。

另请参阅 append()、prepend()、replace() 以及remove()。

QString &QString::insert(qsizetype position, QChar ch)

在字符串中指定索引位置position 处插入ch 。

该字符串会自动扩展以容纳插入内容。如果 `position ` 超出了字符串末尾,则会在字符串末尾追加空格字符直至达到该索引 `position`,随后再插入 `ch`。

该函数重载了QString::insert() 函数。

QString &QString::insert(qsizetype position, QLatin1StringView str)

将由str 处理的 Latin-1 字符串插入到指定索引位置position 。

该字符串会自动扩展以容纳插入的内容。如果position 超出了字符串末尾,则会在字符串末尾追加空格字符直至达到该position 位置,随后再追加str 。

该函数重载了QString::insert()。

[since 6.0] QString &QString::insert(qsizetype position, QStringView str)

在给定的索引position 处插入字符串视图str ,并返回该字符串的引用。

该字符串会自动扩展以容纳插入的内容。如果 `position ` 超出了字符串的末尾,则会在字符串后附加空格字符以达到该索引 `position`,随后再附加 `str`。

此函数重载了QString::insert()。

该函数在 Qt 6.0 中引入。

[since 6.5] QString &QString::insert(qsizetype position, QUtf8StringView str)

将 UTF-8 字符串视图str 插入到给定索引position 处。

注意: 从概念上讲,插入 可变宽度的 UTF-8 编码字符串数据比插入固定宽度的字符串数据(如 UTF-16(QStringView )或 Latin-1(QLatin1StringView ))速度更慢,因此应尽量少用。

该字符串会扩展以容纳插入的内容。如果position 超出了字符串的末尾,则会在字符串后追加空格字符以达到该position ,随后是str 。

此函数重载了QString::insert()。

该函数在 Qt 6.5 中引入。

QString &QString::insert(qsizetype position, const QByteArray &str)

将str 的内容解释为UTF-8,将其编码的Unicode字符串插入到指定索引position 处,并返回该字符串的引用。

该字符串会自动扩展以容纳插入的内容。如果position 超出了字符串的末尾,则会在字符串末尾追加空格字符以达到该position 位置,随后再追加str 。

当定义了QT_NO_CAST_FROM_ASCII 时,此函数不可用。

此函数重载了QString::insert()。

QString &QString::insert(qsizetype position, const char *str)

在给定索引position 处插入C字符串str ,并返回该字符串的引用。

该字符串会自动扩展以容纳插入的内容。如果position 超出了字符串的末尾,则会在字符串末尾追加空格字符以达到该position 位置,随后再追加str 。

当定义了QT_NO_CAST_FROM_ASCII 时,此函数不可用。

此函数重载了QString::insert()。

QString &QString::insert(qsizetype position, const QChar *unicode, qsizetype size)

将QChar 数组unicode 中的前size 个字符插入到字符串中给定的索引position 处。

该字符串会自动扩展以容纳插入的内容。如果position 超出了字符串的末尾,则会在字符串末尾追加空格字符以达到该position ,随后插入QChar 数组unicode 中的size 个字符。

该函数重载了QString::insert()。

[constexpr noexcept] bool QString::isEmpty() const

如果字符串中没有字符,则返回true ;否则返回false 。

示例:

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

另请参阅 size()。

bool QString::isLower() const

如果字符串为小写,即与toLower()折叠结果完全相同,则返回true 。

请注意,这并不意味着该字符串不包含大写字母(某些大写字母没有小写折叠形式;它们在调用toLower() 时保持不变)。有关更多信息,请参阅 Unicode 标准第 3.13 节。

另请参阅 QChar::toLower() 和isUpper()。

[constexpr] bool QString::isNull() const

如果该字符串为空,则返回true ;否则返回false 。

示例:

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

出于历史原因,Qt 将空字符串与 null 字符串区分开来。对于大多数应用程序而言,关键在于字符串是否包含任何数据,这可以通过调用isEmpty() 函数来判断。

另请参阅 isEmpty()。

bool QString::isRightToLeft() const

如果字符串是从右向左阅读的,则返回true 。

另请参阅 QStringView::isRightToLeft()。

bool QString::isUpper() const

如果字符串为大写,即与该字符串的toUpper() 折叠结果完全相同,则返回true 。

请注意,这并不意味着该字符串不包含小写字母(某些小写字母没有大写折叠形式;它们在调用toUpper() 时保持不变)。有关更多信息,请参阅 Unicode 标准第 3.13 节。

另请参阅 QChar::toUpper() 和isLower()。

[noexcept] bool QString::isValidUtf16() const

如果字符串包含有效的 UTF-16 编码数据,则返回 `true `;否则返回 `false `。

请注意,此函数不会对数据进行任何特殊验证;它仅检查数据是否能从 UTF-16 编码中成功解码。数据被假定为采用主机字节序;BOM 的存在不影响结果。

另请参阅 QStringView::isValidUtf16()。

[since 6.0] QString QString::last(qsizetype n) &&

[since 6.0] QString QString::last(qsizetype n) const &

返回包含该字符串末尾n 个字符的字符串。

注意: 当n < 0 或n >size() 时,行为未定义。

QString x = "Pineapple";
QString y = x.last(5);      // y == "apple"

这些函数在 Qt 6.0 中引入。

另请参阅 first()、sliced()、endsWith()、chopped()、chop()、truncate() 以及slice()。

qsizetype QString::lastIndexOf(const QRegularExpression &re, qsizetype from, QRegularExpressionMatch *rmatch = nullptr) const

返回正则表达式re 在字符串中最后一次匹配的索引位置,该匹配始于索引位置from 之前。

如果from 为 -1,则从最后一个字符开始搜索;如果为 -2,则从倒数第二个字符开始,以此类推。

如果re 在任何位置均未匹配,则返回 -1。

如果匹配成功且rmatch 不等于nullptr ,则还会将匹配结果写入由rmatch 指向的QRegularExpressionMatch 对象中。

示例:

QString str = "the minimum";
str.lastIndexOf(QRegularExpression("m[aeiou]"));      // returns 8

QRegularExpressionMatch match;
str.lastIndexOf(QRegularExpression("m[aeiou]"), -1, &match);      // returns 8
// match.captured() == mu

注意:由于 正则表达式匹配算法的运作方式,该函数实际上会从字符串开头开始反复进行匹配,直到到达位置from 为止。

注意:当 搜索可能匹配 0 个字符的正则表达式re 时, 即使通常认为-1 是从字符串末尾开始搜索的,但通过负值from 仍会将数据末尾的匹配结果排除在搜索之外:因为末尾的匹配位于最后一个字符之后,因此会被排除。 若要包含此类最后的空匹配,可为from 指定正值,或完全省略from 参数。

qsizetype QString::lastIndexOf(const QString &str, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串str 在本字符串中最后一次出现的索引位置,从索引位置from 开始向后搜索。

如果from 为 -1,则从字符串末尾开始搜索;如果为 -2,则从倒数第二个字符开始搜索,以此类推。

如果未找到str ,则返回 -1。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

QString x = "crazy azimuths";
QString y = "az";
x.lastIndexOf(y);           // returns 6
x.lastIndexOf(y, 6);        // returns 6
x.lastIndexOf(y, 5);        // returns 2
x.lastIndexOf(y, 1);        // returns -1

注意:当 搜索长度为 0 的 `str`时, 即使通常认为 `-1 ` 是从字符串末尾开始搜索的,但通过负的 `from` 值仍会将数据末尾的匹配项排除在搜索之外:因为末尾的匹配项位于最后一个字符之后,因此会被排除。 若要包含此类末尾的空匹配,可为from 指定正值,或完全省略from 参数。

另请参阅 indexOf()、contains() 和count()。

[noexcept, since 6.3] qsizetype QString::lastIndexOf(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

该函数重载了QString::lastIndexOf()。

该函数在 Qt 6.3 中引入。

[since 6.2] qsizetype QString::lastIndexOf(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串str 在该字符串中最后一次出现的索引位置。如果未找到str ,则返回 -1。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

QString x = "crazy azimuths";
QString y = "az";
x.lastIndexOf(y);           // returns 6
x.lastIndexOf(y, 6);        // returns 6
x.lastIndexOf(y, 5);        // returns 2
x.lastIndexOf(y, 1);        // returns -1

此函数重载了QString::lastIndexOf()。

该函数在 Qt 6.2 中引入。

另请参阅 indexOf()、contains() 和count()。

[noexcept, since 6.2] qsizetype QString::lastIndexOf(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串中字符串视图str 的最后一次出现位置。如果未找到str ,则返回 -1。

如果cs 等于Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

此函数重载了QString::lastIndexOf()。

该函数在 Qt 6.2 中引入。

另请参见 indexOf()、contains() 和count()。

[since 6.2] qsizetype QString::lastIndexOf(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const

返回正则表达式re 在字符串中最后一次匹配的索引位置。如果re 在字符串中未匹配到任何位置,则返回 -1。

如果匹配成功且 `rmatch ` 不是 `nullptr`,它还会将匹配结果写入由 `rmatch` 指向的 `QRegularExpressionMatch ` 对象中。

示例:

QString str = "the minimum";
str.lastIndexOf(QRegularExpression("m[aeiou]"));      // returns 8

QRegularExpressionMatch match;
str.lastIndexOf(QRegularExpression("m[aeiou]"), -1, &match);      // returns 8
// match.captured() == mu

注意:由于 正则表达式匹配算法的运作方式,该函数实际上会从字符串开头开始反复进行匹配,直至到达字符串结尾。

此函数重载了QString::lastIndexOf()。

该函数于 Qt 6.2 中引入。

[since 6.2] qsizetype QString::lastIndexOf(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串中“str ”最后一次出现的索引位置。如果未找到“str ”,则返回-1。

如果cs 等于Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

QString x = "crazy azimuths";
QString y = "az";
x.lastIndexOf(y);           // returns 6
x.lastIndexOf(y, 6);        // returns 6
x.lastIndexOf(y, 5);        // returns 2
x.lastIndexOf(y, 1);        // returns -1

此函数重载了QString::lastIndexOf()。

该函数在 Qt 6.2 中引入。

另请参阅 indexOf()、contains() 和count()。

qsizetype QString::lastIndexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符ch 在此字符串中最后一次出现的索引位置,从索引位置from 开始向后搜索。

该函数重载了QString::lastIndexOf() 函数。

qsizetype QString::lastIndexOf(QLatin1StringView str, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回str 在此字符串中识别到的Latin-1字符串最后一次出现的索引位置,从索引位置from 开始向后搜索。

如果 `from ` 为 -1,则从最后一个字符开始搜索;如果为 -2,则从倒数第二个字符开始搜索,以此类推。

如果未找到 `str `,则返回 -1。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

QString x = "crazy azimuths";
QString y = "az";
x.lastIndexOf(y);           // returns 6
x.lastIndexOf(y, 6);        // returns 6
x.lastIndexOf(y, 5);        // returns 2
x.lastIndexOf(y, 1);        // returns -1

注意:当 搜索长度为 0 的 `str`时, 即使通常认为 `-1 ` 是从字符串末尾开始搜索的,但通过负数的 `from` 仍会将数据末尾的匹配项排除在搜索之外:因为末尾的匹配项位于最后一个字符之后,因此会被排除。 若要包含此类末尾的空匹配,可为from 指定正值,或完全省略from 参数。

此函数重载了QString::lastIndexOf()。

另请参阅 indexOf()、contains() 和count()。

[noexcept] qsizetype QString::lastIndexOf(QStringView str, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

返回字符串中字符串视图str 最后一次出现的位置索引,从索引位置from 开始向后搜索。

如果from 为 -1,则从最后一个字符开始搜索;如果为 -2,则从倒数第二个字符开始搜索,以此类推。

如果未找到str ,则返回 -1。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

注意:当 搜索长度为 0 的str时, 即使通常认为-1 是从字符串末尾开始搜索的,但通过负的from ,数据末尾的匹配项也会被排除在搜索之外:末尾的匹配项位于最后一个字符之后,因此会被排除。 若要包含此类末尾的空匹配,可为from 指定正值,或完全省略from 参数。

此函数重载了QString::lastIndexOf()。

另请参阅 indexOf()、contains() 和count()。

QString QString::left(qsizetype n) &&

QString QString::left(qsizetype n) const &

返回一个子字符串,其中包含该字符串最左侧的n 个字符(即从该字符串开头开始,直到索引位置n 处的元素之前,但不包括该元素)。

如果已知n 不会超出范围,请在新代码中改用first(),因为它的执行速度更快。

如果n 大于或等于size(),或者小于零,则返回整个字符串。

另请参阅 first()、last()、startsWith()、chopped()、chop() 以及truncate()。

QString QString::leftJustified(qsizetype width, QChar fill = u' ', bool truncate = false) const

返回一个长度为width 的字符串,其中包含该字符串,并在前后用fill 字符进行填充。

如果truncate 为false ,且该字符串的size() 值大于width ,则返回的字符串是该字符串的副本。

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

如果 `truncate ` 为 `true `,且该字符串的 `size()` 值大于 `width`,则字符串副本中位置 `width ` 之后的所有字符将被删除,并返回该副本。

QString str = "Pineapple";
str = str.leftJustified(5, '.', true);    // str == "Pinea"

另请参阅 rightJustified()。

[constexpr noexcept] qsizetype QString::length() const

返回该字符串中的字符数。等同于 `size()`。

另请参阅 resize()。

[static] int QString::localeAwareCompare(const QString &s1, const QString &s2)

比较s1 与s2 ,并返回一个小于、等于或大于零的整数,分别表示s1 小于、等于或大于s2 。

该比较操作既取决于区域设置,也取决于平台。使用此函数可向用户呈现按顺序排序的字符串列表。

另请参阅 compare()、QLocale 以及Comparing Strings 。

[since 6.0] int QString::localeAwareCompare(QStringView other) const

将该字符串与other 字符串进行比较,并根据该字符串是否小于、等于或大于other 字符串,返回小于、等于或大于零的整数。

比较操作的方式取决于区域设置和平台。使用此函数可向用户展示按顺序排列的字符串列表。

与localeAwareCompare(*this, other) 相同。

此函数重载了QString::localeAwareCompare()。

该函数在 Qt 6.0 中引入。

另请参阅 Comparing Strings 。

int QString::localeAwareCompare(const QString &other) const

将该字符串与other 字符串进行比较,并返回一个小于、等于或大于零的整数,分别表示该字符串小于、等于或大于other 字符串。

比较操作取决于区域设置和平台。使用此函数可向用户展示按顺序排列的字符串列表。

与localeAwareCompare(*this, other) 相同。

此函数重载了QString::localeAwareCompare()。

另请参阅 Comparing Strings 。

[static, since 6.0] int QString::localeAwareCompare(QStringView s1, QStringView s2)

比较s1 与s2 ,并返回一个小于、等于或大于零的整数,分别表示s1 小于、等于或大于s2 。

该比较操作既取决于区域设置,也取决于平台。使用此函数可向用户呈现按顺序排列的字符串列表。

该函数重载了QString::localeAwareCompare()。

该函数在 Qt 6.0 中引入。

另请参阅 Comparing Strings 。

[static constexpr noexcept, since 6.8] qsizetype QString::maxSize()

[constexpr noexcept, since 6.8] qsizetype QString::max_size() const

该函数返回字符串理论上可容纳的元素最大数量。实际上,该数量可能要小得多,具体取决于系统可用的内存大小。

这些函数是在 Qt 6.8 中引入的。

QString QString::mid(qsizetype position, qsizetype n = -1) &&

QString QString::mid(qsizetype position, qsizetype n = -1) const &

n 返回一个字符串,其中包含该字符串中从指定position 索引位置开始、直至(但不包括)索引位置 position + n。

如果您确定position 和n 不会超出范围,请在新代码中改用sliced(),因为它的执行速度更快。

如果position 索引超出字符串的长度,则返回空字符串。如果从给定的position 开始,字符串中可用的字符少于n 个,或者如果n 为 -1(默认值),则该函数返回从指定的position 开始的所有可用字符。

另请参阅 first()、last()、sliced()、chopped()、chop()、truncate() 和slice()。

QString QString::normalized(QString::NormalizationForm mode, QChar::UnicodeVersion version = QChar::Unicode_Unassigned) const

根据Unicode标准中给定的version ,返回采用给定Unicode规范化方式mode 处理后的字符串。

[since 6.10] QString &QString::nullTerminate()

如果该字符串数据未以空字符结尾,则该方法将对数据进行深度复制,并使其以空字符结尾。

QString 默认是空终止的,但在某些情况下(例如使用fromRawData() 时),字符串数据并不一定以\0 字符结尾,这在调用期望接收空终止字符串的方法时可能会造成问题。

该函数于 Qt 6.10 中引入。

另请参阅 nullTerminated()、fromRawData() 和setRawData()。

[since 6.10] QString QString::nullTerminated() &&

[since 6.10] QString QString::nullTerminated() const &

返回该字符串的一个副本,该副本始终以空字符结尾。

这些函数在 Qt 6.10 中引入。

另请参阅 nullTerminate()、fromRawData() 和setRawData()。

[static] QString QString::number(long n, int base = 10)

根据指定的base ,返回与数字n 等价的字符串。

默认进制为 10,且必须在 2 到 36 之间。对于 10 以外的进制,n 将被视为无符号整数。

格式化始终使用QLocale::C ,即 English/UnitedStates。若要获取数字的本地化字符串表示形式,请使用QLocale::toString()并指定相应的区域设置。

long a = 63;
QString s = QString::number(a, 16);             // s == "3f"
QString t = QString::number(a, 16).toUpper();     // t == "3F"

另请参阅 setNum()。

[static] QString QString::number(double n, char format = 'g', int precision = 6)

返回一个字符串,该字符串表示浮点数n 。

返回一个字符串,该字符串表示n ,并根据指定的format 和precision 进行格式化。

对于包含指数的格式,指数将显示其正负号并至少包含两位数,必要时在指数左侧用零补零。

另请参阅 setNum()、QLocale::toString()、QLocale::FloatingPointPrecisionOption 以及Number formats 。

[static] QString QString::number(int n, int base = 10)

这是一个重载函数。

[static] QString QString::number(qlonglong n, int base = 10)

这是一个重载函数。

[static] QString QString::number(qulonglong n, int base = 10)

这是一个重载函数。

[static] QString QString::number(uint n, int base = 10)

这是一个重载函数。

[static] QString QString::number(ulong n, int base = 10)

这是一个重载函数。

QString &QString::prepend(const QString &str)

将字符串str 追加到该字符串的开头,并返回该字符串的引用。

该操作通常非常快(常数时间),因为QString 会在字符串数据的开头预分配额外空间,因此字符串可以动态扩展,而无需每次都重新分配整个字符串。

示例:

QString x = "ship";
QString y = "air";
x.prepend(y);
// x == "airship"

另请参阅 append() 和insert()。

QString &QString::prepend(QChar ch)

在该字符串前添加字符ch 。

该函数重载了QString::prepend() 函数。

QString &QString::prepend(QLatin1StringView str)

将str 所处理的Latin-1字符串追加到此字符串的开头。

此函数重载了QString::prepend()。

[since 6.0] QString &QString::prepend(QStringView str)

将字符串视图str 追加到该字符串的开头,并返回该字符串的引用。

此函数重载了QString::prepend()。

该函数在 Qt 6.0 中引入。

[since 6.5] QString &QString::prepend(QUtf8StringView str)

将 UTF-8 字符串视图str 追加到该字符串的开头。

此函数重载了QString::prepend()。

该函数于 Qt 6.5 中引入。

QString &QString::prepend(const QByteArray &ba)

将字节数组ba 追加到该字符串的开头。该字节数组将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此功能。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,此功能便十分有用。

该函数重载了QString::prepend()。

QString &QString::prepend(const char *str)

在该字符串前添加字符串str 。const char指针将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此函数。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,这会非常有用。

该函数重载了QString::prepend()。

QString &QString::prepend(const QChar *str, qsizetype len)

将QChar 数组str 中的len 个字符追加到该字符串的开头,并返回该字符串的引用。

此函数重载了QString::prepend()。

void QString::push_back(const QString &other)

此函数是为了兼容STL而提供的,它将给定的other 字符串追加到该字符串的末尾。它等同于append(other) 。

另请参阅 append()。

void QString::push_back(QChar ch)

将给定的ch 字符追加到该字符串的末尾。

这是一个重载函数。

void QString::push_front(const QString &other)

此函数是为了兼容STL而提供的,它会将给定的other 字符串追加到该字符串的开头。它等同于prepend(other) 。

另请参阅 prepend()。

void QString::push_front(QChar ch)

将给定的ch 字符添加到该字符串的开头。

这是一个重载函数。

QString::reverse_iterator QString::rbegin()

返回一个STL 风格的反向迭代器,该迭代器指向字符串中第一个字符,且顺序为反向。

警告: 当脱离上下文或修改QString 时,返回的迭代器将失效。

另请参阅 begin()、crbegin() 和rend()。

QString::const_reverse_iterator QString::rbegin() const

这是一个重载函数。

QString &QString::remove(const QRegularExpression &re)

从字符串中移除所有匹配正则表达式re 的部分,并返回该字符串的引用。例如:

QString r = "Telephone";
r.remove(QRegularExpression("[aeiou]."));
// r == "The"

元素删除操作将保留字符串的容量,不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请在最后一次更改字符串大小后调用squeeze()。

另请参阅 indexOf()、lastIndexOf() 和replace()。

QString &QString::remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)

删除该字符串中所有出现ch 的字符,并返回该字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

示例:

QString t = "Ali Baba";
t.remove(QChar('a'), Qt::CaseInsensitive);
// t == "li Bb"

这与replace(ch, "", cs) 效果相同。

删除元素将保留字符串的容量,不会减少已分配的内存量。若要释放多余的容量并尽可能释放更多内存,请在最后一次更改字符串大小后调用squeeze()。

另请参阅 replace()。

QString &QString::remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)

从该字符串中删除所有出现的指定str 字符串,并返回对该字符串的引用。

如果 `cs ` 为 `Qt::CaseSensitive `(默认值),则搜索区分大小写;否则,搜索不区分大小写。

这与replace(str, "", cs) 相同。

删除元素将保留字符串的容量,不会减少已分配的内存量。要释放多余的容量并尽可能多地释放内存,请在最后一次更改字符串大小后调用squeeze()。

另请参阅 replace()。

QString &QString::remove(qsizetype position, qsizetype n)

从字符串中移除以给定position 索引位置为起点的n 字符,并返回该字符串的引用。

如果指定的position 索引位于字符串内部,但position +n 超出了字符串末尾,则字符串将在指定的position 处被截断。

如果n <= 0,则不进行任何更改。

QString s = "Montreal";
s.remove(1, 4);
// s == "Meal"

删除元素将保留字符串的容量,不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请在最后一次更改字符串大小后调用squeeze()。

另请参阅 insert() 和replace()。

QString &QString::remove(QLatin1StringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive)

从该字符串中移除所有由str 识别出的指定Latin-1字符串的出现位置,并返回该字符串的引用。

如果 `cs ` 为 `Qt::CaseSensitive `(默认值),则搜索区分大小写;否则,搜索不区分大小写。

这与replace(str, "", cs) 相同。

删除元素将保留字符串的容量,不会减少已分配的内存量。若要释放多余的容量并尽可能多地释放内存,请在最后一次更改字符串大小后调用squeeze()。

这是一个重载函数。

另请参阅 replace()。

[since 6.5] QString &QString::removeAt(qsizetype pos)

删除索引为pos 处的字符。如果pos 超出范围(即pos >=size()),则该函数不执行任何操作。

该函数在 Qt 6.5 中引入。

另请参阅 remove()。

[since 6.5] QString &QString::removeFirst()

删除该字符串的第一个字符。如果字符串为空,则该函数不执行任何操作。

该函数自 Qt 6.5 起引入。

另请参阅 remove()。

[since 6.1] template <typename Predicate> QString &QString::removeIf(Predicate pred)

从字符串中移除所有满足谓词pred 返回 true 的元素。返回该字符串的引用。

该函数在 Qt 6.1 中引入。

另请参阅 remove()。

[since 6.5] QString &QString::removeLast()

删除该字符串的最后一个字符。如果字符串为空,则该函数不执行任何操作。

该函数于 Qt 6.5 版本中引入。

另请参阅 remove()。

QString::reverse_iterator QString::rend()

返回一个STL 风格的反向迭代器,该迭代器指向字符串中最后一个字符之后的位置,且按反向顺序排列。

警告: 当脱离上下文或修改QString 时,返回的迭代器将失效。

另请参阅 end()、crend() 和rbegin()。

QString::const_reverse_iterator QString::rend() const

这是一个重载函数。

QString QString::repeated(qsizetype times) const

返回该字符串的副本,并按指定的times 次数进行重复。

如果 `times ` 小于 1,则返回空字符串。

示例:

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

QString &QString::replace(qsizetype position, qsizetype n, const QString &after)

将从索引position 开始的n 个字符替换为字符串after ,并返回对此字符串的引用。

注意:如果 指定的position 索引位于字符串内部,但position +n 超出了字符串的范围,则n 将被调整为在字符串末尾停止。

示例:

QString x = "Say yes!";
QString y = "no";
x.replace(4, 3, y);
// x == "Say no!"

另请参阅 insert() 和remove()。

QString &QString::replace(const QRegularExpression &re, const QString &after)

将字符串中所有出现的正则表达式re 替换为after 。返回对该字符串的引用。例如:

QString s = "Banana";
s.replace(QRegularExpression("a[mn]"), "ox");
// s == "Boxoxa"

对于包含捕获组的正则表达式, \1、 \2、……等模式在after 中被替换为由相应捕获组捕获的字符串。

QString t = "A <i>bon mot</i>.";
t.replace(QRegularExpression("<i>([^<]*)</i>"), "\\emph{\\1}");
// t == "A \\emph{bon mot}."

此函数重载了QString::replace()。

另请参阅 indexOf()、lastIndexOf()、remove()、QRegularExpression 以及QRegularExpressionMatch 。

QString &QString::replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将字符before 替换为after (无论出现多少次),并返回对此字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

该函数重载了QString::replace() 函数。

QString &QString::replace(QChar c, QLatin1StringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将字符c 替换为字符串after ,并返回该字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

注意: 替换后不会重新扫描文本 。

此函数重载了QString::replace()。

QString &QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将字符串中所有出现的字符ch 替换为after ,并返回该字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

该函数重载了QString::replace() 函数。

QString &QString::replace(QLatin1StringView before, QLatin1StringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将该字符串中由before 解析得到的 Latin-1 字符串的所有出现位置,替换为由after 解析得到的 Latin-1 字符串,并返回该字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

注意: 替换后不会重新扫描文本 。

注意:如果 使用空的before 参数,则after 参数将被插入到字符串中每个字符的前后。

此函数重载了QString::replace()。

QString &QString::replace(QLatin1StringView before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将该字符串中由before 解析的 Latin-1 字符串的所有出现位置替换为字符串after ,并返回该字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

注意: 替换后不会重新扫描文本 。

注意:如果 使用空的before 参数,则after 参数将被插入到字符串中每个字符的前后。

此函数重载了QString::replace() 函数。

QString &QString::replace(const QString &before, QLatin1StringView after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将字符串“before ”的所有出现位置替换为“after ”,并返回该字符串的引用。

如果cs 等于Qt::CaseSensitive (默认情况),则搜索区分大小写;否则,搜索不区分大小写。

注意: 替换后不会重新扫描文本 。

注意:如果 使用空的before 参数,则after 参数将被插入到字符串中每个字符的前后。

此函数重载了QString::replace()。

QString &QString::replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将字符串before 替换为after (替换所有出现的位置),并返回该字符串的引用。

如果cs 为Qt::CaseSensitive (默认情况),则搜索区分大小写;否则,搜索不区分大小写。

示例:

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

注意: 替换文本在插入后不会被重新扫描。

示例:

QString equis = "xxxxxx";
equis.replace("xx", "x");
// equis == "xxx"

注意:如果 使用空的 `before ` 参数,则 `after ` 参数将被插入到字符串中每个字符的前后。

此函数重载了QString::replace()。

QString &QString::replace(qsizetype position, qsizetype n, QChar after)

将字符串n 中从索引position 开始的字符替换为字符after ,并返回对此字符串的引用。

该函数重载了QString::replace()。

QString &QString::replace(qsizetype position, qsizetype n, const QChar *after, qsizetype alen)

将从索引position 开始的n 个字符替换为数组QChar (after )中的前alen 个字符,并返回该字符串的引用。

n 索引 xml-ph-0001@deepl.internal 不得为负数。

该函数重载了QString::replace()。

QString &QString::replace(const QChar *before, qsizetype blen, const QChar *after, qsizetype alen, Qt::CaseSensitivity cs = Qt::CaseSensitive)

将该字符串中所有出现的位置替换为:将before 的前blen 个字符替换为after 的前alen 个字符,并返回对该字符串的引用。

如果cs 为Qt::CaseSensitive (默认值),则搜索区分大小写;否则,搜索不区分大小写。

注意:如果 before 指向一个空字符串(即blen == 0),则after 所指向的字符串将被插入到该字符串中每个字符的前后。

此函数重载了QString::replace()。

void QString::reserve(qsizetype size)

确保字符串至少有空间容纳size 个字符。

如果你事先知道字符串的大小,可以调用此函数,以避免在构建字符串时反复进行内存重新分配。这在增量构建字符串时可以提高性能。 对字符串进行多次追加操作可能会触发多次重新分配,而最后一次重新分配可能会导致剩余空间远超实际需求。这比在开始时一次性分配合适大小的内存效率要低。

如果对所需空间大小不确定,通常最好使用上界作为size ,或者在严格上界远大于该值时,采用对最可能大小的保守估计。 如果 `size ` 估计过低,一旦预留大小被超过,字符串将按需扩展,这可能会导致实际分配的大小超过你最乐观的估计值,并会减慢触发该操作的运行速度。

警告:reserve () 仅预留内存,但不会改变字符串的大小。访问字符串末尾之后的数据将导致未定义行为。若需访问当前字符串末尾之后的内存,请使用resize()。

此函数适用于需要构建长字符串且希望避免重复重新分配内存的代码。在此示例中,我们希望向字符串中不断追加内容,直到满足某个条件时调用 `true()`,并且我们相当确定该大小足够大,使得调用 `reserve()` 值得:

QString result;
qsizetype maxSize;
bool condition;
QChar nextChar;

result.reserve(maxSize);

while (condition)
    result.append(nextChar);

result.squeeze();

另请参阅 squeeze()、capacity() 和resize()。

void QString::resize(qsizetype size)

将字符串的长度设置为size 个字符。

如果size 大于当前大小,则字符串将被扩展至size 个字符长,额外字符将追加到字符串末尾。新增的字符处于未初始化状态。

如果 `size ` 小于当前大小,则位置 `size ` 之后的字符将从字符串中移除。

注意:虽然 resize() 会在需要时扩大容量,但绝不会缩小容量。若要释放多余容量,请使用squeeze()。

示例:

QString s = "Hello world";
s.resize(5);
// s == "Hello"

s.resize(8);
// s == "Hello???" (where ? stands for any character)

若要向字符串末尾追加一定数量的相同字符,请使用resize(qsizetype, QChar) 重载函数。

若需扩展字符串以达到特定宽度,并用特定字符填充新位置,请使用leftJustified() 函数:

如果 `size ` 为负值,则等同于传入零。

QString r = "Hello";
r = r.leftJustified(10, ' ');
// r == "Hello     "

另请参阅 truncate()、reserve() 和squeeze()。

void QString::resize(qsizetype newSize, QChar fillChar)

与resize (qsizetype)不同,此重载会将新字符初始化为fillChar :

QString t = "Hello";
t.resize(t.size() + 10, 'X');
// t == "HelloXXXXXXXXXX"

这是一个重载函数。

[since 6.8] void QString::resizeForOverwrite(qsizetype size)

将字符串的大小设置为size 个字符。如果字符串的大小增加,新增的字符将处于未初始化状态。

该行为与resize(size) 完全一致。

该函数在 Qt 6.8 中引入。

另请参阅 resize()。

QString QString::right(qsizetype n) const &

返回一个子字符串,其中包含字符串最右侧的n 个字符。

如果已知 `n ` 不会超出范围,请在新代码中改用 `last()`,因为它的执行速度更快。

如果n 大于或等于size(),或者小于零,则返回整个字符串。

另请参阅 endsWith()、last()、first()、sliced()、chopped()、chop()、truncate() 以及slice()。

QString QString::rightJustified(qsizetype width, QChar fill = u' ', bool truncate = false) const

返回一个字符串size()width ,其中包含字符fill ,后接该字符串。例如:

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

如果truncate 为false ,且该字符串的size() 值大于width ,则返回的字符串是该字符串的副本。

如果truncate 为true,且字符串的size()值大于width ,则生成的字符串将在width 位置被截断。

QString str = "Pineapple";
str = str.rightJustified(5, '.', true);    // str == "Pinea"

另请参阅 leftJustified()。

QString QString::section(QChar sep, qsizetype start, qsizetype end = -1, QString::SectionFlags flags = SectionDefault) const

该函数返回字符串中的一段内容。

该字符串被视为由字符sep 分隔的一系列字段。返回的字符串包含从位置start 到位置end (含)之间的字段。如果未指定end ,则包含从位置start 到字符串结尾的所有字段。 字段编号从左向右依次为 0、1、2 等,从右向左则依次为 -1、-2 等。

参数flags 可用于影响该函数行为的某些方面,例如是否区分大小写、是否跳过空字段以及如何处理前缀和后缀分隔符;详见SectionFlags 。

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

str = csv.section(',', 2, 2);   // str == "surname"
str = path.section('/', 3, 4);  // str == "bin/myapp"
str = path.section('/', 3, 3, flag); // str == "myapp"

如果start 或end 为负数,则从字符串的右侧开始计数字段,最右侧的字段为 -1,次右侧的字段为 -2,依此类推。

str = csv.section(',', -3, -2);  // str == "middlename,surname"
str = path.section('/', -1); // str == "myapp"

另请参阅 split()。

QString QString::section(const QRegularExpression &re, qsizetype start, qsizetype end = -1, QString::SectionFlags flags = SectionDefault) const

该字符串将被视为由正则表达式re 分隔的一系列字段。

QString line = "forename\tmiddlename  surname \t \t phone";
QRegularExpression sep("\\s+");
str = line.section(sep, 2, 2); // str == "surname"
str = line.section(sep, -3, -2); // str == "middlename  surname"

警告:使用 此QRegularExpression 版本的开销远高于重载的字符串和字符版本。

此函数重载了QString::section()。

另请参阅 split() 和simplified()。

QString QString::section(const QString &sep, qsizetype start, qsizetype end = -1, QString::SectionFlags flags = SectionDefault) const

QString str;
QString data = "forename**middlename**surname**phone";

str = data.section("**", 2, 2); // str == "surname"
str = data.section("**", -3, -2); // str == "middlename**surname"

该函数重载了 `QString::section()`。

另请参阅 split()。

QString &QString::setNum(int n, int base = 10)

将字符串设置为指定base 中n 的打印值,并返回该字符串的引用。

默认进制为10,且必须在2到36之间。

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

格式化始终使用QLocale::C ,即 English/UnitedStates。要获取数字的本地化字符串表示形式,请使用QLocale::toString() 并指定相应的区域设置。

另请参阅 number()。

QString &QString::setNum(long n, int base = 10)

这是一个重载函数。

QString &QString::setNum(qlonglong n, int base = 10)

这是一个重载函数。

QString &QString::setNum(qulonglong n, int base = 10)

这是一个重载函数。

QString &QString::setNum(short n, int base = 10)

这是一个重载函数。

QString &QString::setNum(uint n, int base = 10)

这是一个重载函数。

QString &QString::setNum(ulong n, int base = 10)

这是一个重载函数。

QString &QString::setNum(ushort n, int base = 10)

这是一个重载函数。

QString &QString::setNum(double n, char format = 'g', int precision = 6)

将字符串设置为n 的打印值,该值根据给定的format 和precision 进行格式化,并返回该字符串的引用。

这是一个重载函数。

另请参阅 number()、QLocale::FloatingPointPrecisionOption 和Number formats 。

QString &QString::setNum(float n, char format = 'g', int precision = 6)

将字符串设置为n 的打印值,该值根据给定的format 和precision 进行格式化,并返回该字符串的引用。

格式化始终使用QLocale::C ,即英语/美国。若要获取数字的本地化字符串表示形式,请使用QLocale::toString()并指定相应的区域设置。

这是一个重载函数。

另请参阅 number()。

QString &QString::setRawData(const QChar *unicode, qsizetype size)

将QString 重置为使用数组unicode 中前size 个Unicode字符。unicode 中的数据不会被复制。调用方必须能够保证,只要QString (或其未被修改的副本)存在,unicode 就不会被删除或修改。

该函数可替代fromRawData() 使用,以便复用现有的QString 对象,从而节省内存重新分配。

另请参阅 fromRawData()、nullTerminate() 和nullTerminated()。

QString &QString::setUnicode(const QChar *unicode, qsizetype size)

将字符串调整为size 个字符,并将unicode 复制到该字符串中。

如果unicode 为nullptr ,则不会进行复制,但字符串仍会被调整为size 的长度。

另请参阅 unicode() 和setUtf16()。

[since 6.9] QString &QString::setUnicode(const char16_t *unicode, qsizetype size)

这是一个重载函数。

该函数在 Qt 6.9 中引入。

另请参阅 unicode() 和setUtf16()。

[since 6.9] QString &QString::setUtf16(const char16_t *unicode, qsizetype size)

将字符串调整为size 个字符,并将unicode 复制到该字符串中。

如果unicode 等于nullptr ,则不会进行复制,但字符串仍会被调整为size 的长度。

请注意,与fromUtf16() 不同,此函数不会考虑 BOM 以及可能存在的字节顺序差异。

该函数在 Qt 6.9 中引入。

另请参阅 utf16() 和setUnicode()。

void QString::shrink_to_fit()

提供此函数是为了兼容 STL。它等同于 `squeeze()`。

另请参阅 squeeze()。

QString QString::simplified() const

返回一个字符串,该字符串已去除首尾的空白,且其中的每个内部空白序列均被替换为单个空格。

空格指任何调用 `QChar::isSpace()` 时返回 `true` 的字符。这包括 ASCII 字符 '\t'、'\n'、'\v'、'\f'、'\r' 以及 ' '。

示例:

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

另请参阅 trimmed()。

[constexpr noexcept] qsizetype QString::size() const

返回该字符串中的字符个数。

字符串中的最后一个字符位于位置 size() - 1 处。

示例:

QString str = "World";
qsizetype n = str.size();   // n == 5
str.data()[0];              // returns 'W'
str.data()[4];              // returns 'd'

另请参阅 isEmpty() 和resize()。

[since 6.8] QString &QString::slice(qsizetype pos, qsizetype n)

将此字符串修改为从位置pos 开始,直至索引位置 pos + n处的字符(代码点)处,但不包括该字符本身;并返回对此字符串的引用。

注意: 如果pos < 0、n < 0,或者pos +n >size(),则行为 未定义。

QString x = u"Nine pineapples"_s;
x.slice(5);     // x == "pineapples"
x.slice(4, 3);  // x == "app"

该函数在 Qt 6.8 中引入。

另请参阅 sliced()、first()、last()、chopped()、chop() 以及truncate()。

[since 6.8] QString &QString::slice(qsizetype pos)

将此字符串从位置pos 开始修改至末尾,并返回对此字符串的引用。

注意: 若pos < 0 或pos >size(),则行为 未定义。

这是一个重载函数。

该函数在 Qt 6.8 中引入。

另请参阅 sliced()、first()、last()、chopped()、chop() 以及truncate()。

[since 6.0] QString QString::sliced(qsizetype pos, qsizetype n) &&

[since 6.0] QString QString::sliced(qsizetype pos, qsizetype n) const &

n 返回一个字符串,其中包含该字符串中从位置pos 开始、直至索引位置 pos + n处的元素。

注意: 当pos < 0、n < 0 或pos +n >size() 时,行为 未定义。

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

这些函数在 Qt 6.0 中引入。

另请参阅 first()、last()、chopped()、chop()、truncate() 以及slice()。

[since 6.0] QString QString::sliced(qsizetype pos) &&

[since 6.0] QString QString::sliced(qsizetype pos) const &

返回一个字符串,其中包含从位置pos 开始直至该字符串结尾的该字符串片段。

注意: 当pos < 0 或pos >size() 时,行为未定义。

这些函数在 Qt 6.0 中引入。

另请参阅 first()、last()、chopped()、chop()、truncate() 以及slice()。

QStringList QString::split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

在字符串中出现sep 的位置将其拆分为子字符串,并返回这些字符串的列表。如果sep 在字符串中任何位置均未匹配,则 split() 返回一个仅包含该字符串的单元素列表。

cs 指定sep 的匹配是否区分大小写。

如果behavior 为Qt::SkipEmptyParts ,则结果中不会出现空条目。默认情况下,会保留空条目。

示例:

QString str = QStringLiteral("a,,b,c");

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

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

如果 `sep ` 为空,`split()` 会返回一个空字符串,随后是该字符串的每个字符,最后再跟一个空字符串:

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

要理解这种行为,请记住空字符串在任何位置都匹配,因此上述情况在性质上等同于:

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

另请参阅 QStringList::join() 和section()。

QStringList QString::split(const QRegularExpression &re, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const

在正则表达式re 匹配的位置将字符串拆分为子字符串,并返回这些字符串的列表。如果re 在字符串中任何位置均不匹配,则 split() 返回一个仅包含该字符串的单元素列表。

以下是一个示例,我们使用一个或多个空白字符作为分隔符来提取句子中的单词:

QString str;
QStringList list;

str = "Some  text\n\twith  strange whitespace.";
list = str.split(QRegularExpression("\\s+"));
// list: [ "Some", "text", "with", "strange", "whitespace." ]

下面是一个类似的示例,但这次我们使用任意一串非单词字符作为分隔符:

str = "This time, a normal English sentence.";
list = str.split(QRegularExpression("\\W+"), Qt::SkipEmptyParts);
// list: [ "This", "time", "a", "normal", "English", "sentence" ]

以下是第三个示例,其中我们使用零长度断言, \b (单词边界),将字符串拆分为非单词标记与单词标记交替出现的序列:

str = "Now: this sentence fragment.";
list = str.split(QRegularExpression("\\b"));
// list: [ "", "Now", ": ", "this", " ", "sentence", " ", "fragment", "." ]

这是一个重载函数。

另请参阅 QStringList::join() 和section()。

QStringList QString::split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

这是一个重载函数。

void QString::squeeze()

释放存储字符数据以外的任何内存。

此函数的唯一目的是提供一种对QString 的内存使用情况进行微调的手段。通常情况下,您几乎不需要调用此函数。

另请参阅 reserve() 和capacity()。

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

如果字符串以s 开头,则返回true ;否则返回false 。

如果 `cs ` 为 `Qt::CaseSensitive `(默认值),则搜索区分大小写;否则,搜索不区分大小写。

QString str = "Bananas";
str.startsWith("Ban");     // returns true
str.startsWith("Car");     // returns false

另请参阅 endsWith()。

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

如果字符串以c 开头,则返回true ;否则返回false 。

该函数重载了QString::startsWith()。

bool QString::startsWith(QLatin1StringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

该函数重载了QString::startsWith()。

[noexcept] bool QString::startsWith(QStringView str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

如果字符串以字符串视图str 开头,则返回true ;否则返回false 。

如果 `cs ` 为 `Qt::CaseSensitive `(默认值),则搜索区分大小写;否则,搜索不区分大小写。

这是一个重载函数。

另请参阅 endsWith()。

[noexcept] void QString::swap(QString &other)

将该字符串与other 互换。此操作速度极快,且绝不会失败。

CFStringRef QString::toCFString() const

根据QString 创建一个CFString。

调用方拥有该 CFString,并负责释放它。

注意:此 函数仅在 macOS 和 iOS 上可用。

QString QString::toCaseFolded() const

返回该字符串的大小写转换后的等效字符串。对于大多数 Unicode 字符,该函数与 `toLower()` 的返回结果相同。

double QString::toDouble(bool *ok = nullptr) const

返回已转换为double 值的字符串。

如果转换发生溢出,则返回无穷大;如果因其他原因(例如下溢)导致转换失败,则返回 0.0。

如果 `ok ` 不是 `nullptr`,则通过将 * `ok ` 设置为 `false` 来报告失败,通过将 * `ok ` 设置为 `true` 来报告成功。

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

警告: QString 的内容 只能包含有效的数字字符,包括正负号、科学记数法中使用的字母 e 以及小数点。包含单位或额外字符会导致转换错误。

bool ok;
double d;

d = QString( "1234.56e-02" ).toDouble(&ok); // ok == true, d == 12.3456

d = QString( "1234.56e-02 Volt" ).toDouble(&ok); // ok == false, d == 0

字符串转换始终在“C”区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toDouble()

d = QString( "1234,56" ).toDouble(&ok); // ok == false
d = QString( "1234.56" ).toDouble(&ok); // ok == true, d == 1234.56

出于历史原因,此函数不处理千位分隔符。若需转换此类数字,请使用QLocale::toDouble()。

d = QString( "1,234,567.89" ).toDouble(&ok); // ok == false
d = QString( "1234567.89" ).toDouble(&ok); // ok == true

此函数会忽略首尾的空白字符。

另请参阅 number()、QLocale::setDefault()、QLocale::toDouble() 以及trimmed()。

[since 6.6] emscripten::val QString::toEcmaString() const

将该对象转换为ECMAScript 字符串。

该函数在 Qt 6.6 中引入。

另请参阅 fromEcmaString()。

float QString::toFloat(bool *ok = nullptr) const

返回已转换为float 值的字符串。

如果转换发生溢出,则返回无穷大;如果因其他原因(例如下溢)导致转换失败,则返回 0.0。

如果 `ok ` 不是 `nullptr`,则通过将 * `ok ` 设置为 `false` 来报告失败,通过将 * `ok ` 设置为 `true` 来报告成功。

警告: QString 的内容 只能包含有效的数字字符,包括正负号、科学记数法中使用的字符 e 以及小数点。包含单位或其他字符会导致转换错误。

字符串转换始终在“C”区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toFloat()

出于历史原因,此函数不处理千位分隔符。若需转换此类数字,请使用QLocale::toFloat()。

示例:

QString str1 = "1234.56";
str1.toFloat();             // returns 1234.56

bool ok;
QString str2 = "R2D2";
str2.toFloat(&ok);          // returns 0.0, sets ok to false

QString str3 = "1234.56 Volt";
str3.toFloat(&ok);          // returns 0.0, sets ok to false

此函数会忽略开头和结尾的空白字符。

另请参阅 number()、toDouble()、toInt()、QLocale::toFloat() 以及trimmed()。

QString QString::toHtmlEscaped() const

将纯文本字符串转换为包含 HTML 元字符的 HTML 字符串,其中< 、> 、& 和" 被替换为 HTML 实体。

示例:

QString plain = "#include <QtCore>";
QString html = plain.toHtmlEscaped();
// html == "#include &lt;QtCore&gt;"

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

返回将字符串转换为int 格式的结果,转换时使用基数base ,该基数默认值为10,且必须在2到36之间,或为0。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则使用十六进制;否则,如果字符串以“0b”开头,则使用二进制;否则,如果字符串以“0”开头,则使用八进制; 否则,采用十进制。

字符串转换始终在“C”区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toInt()

示例:

QString str = "FF";
bool ok;
int hex = str.toInt(&ok, 16);       // hex == 255, ok == true
int dec = str.toInt(&ok, 10);       // dec == 0, ok == false

该函数会忽略字符串首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toUInt()、toDouble() 以及QLocale::toInt()。

QByteArray QString::toLatin1() const

返回字符串的Latin-1表示形式,格式为QByteArray 。

如果字符串包含非Latin-1字符,则返回的字节数组未定义。这些字符可能会被省略或替换为问号。

另请参阅 fromLatin1()、toUtf8()、toLocal8Bit() 以及QStringEncoder 。

QByteArray QString::toLocal8Bit() const

返回字符串在本地系统中的 8 位表示形式,类型为 `QByteArray`。

在 Unix 系统上,这等同于toUtf8()。请注意,在 Apple 系统上,此函数不会考虑NSString.defaultCStringEncoding或CFStringGetSystemEncoding()的结果,因为这些函数通常返回传统的“Western (Mac OS Roman)”编码,而该编码不应在现代 Apple 操作系统上使用。 在 Windows 系统上,将使用系统当前的代码页。

如果该字符串包含任何无法用本地 8 位编码编码的字符,则返回的字节数组未定义。这些字符可能会被抑制或替换为其他字符。

另请参阅 fromLocal8Bit(),toLatin1(),toUtf8() 以及QStringEncoder 。

long QString::toLong(bool *ok = nullptr, int base = 10) const

返回将字符串转换为long 格式的结果,转换时使用基数base (默认值为10,必须在2到36之间,或为0)。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则使用十六进制;否则,如果字符串以“0b”开头,则使用二进制;否则,如果字符串以“0”开头,则使用八进制; 否则,采用十进制。

字符串转换始终在“C”区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toLongLong()

示例:

QString str = "FF";
bool ok;

long hex = str.toLong(&ok, 16);     // hex == 255, ok == true
long dec = str.toLong(&ok, 10);     // dec == 0, ok == false

该函数会忽略首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toULong()、toInt() 以及QLocale::toInt()。

qlonglong QString::toLongLong(bool *ok = nullptr, int base = 10) const

返回将字符串转换为long long 的结果,转换时使用基数base (默认值为 10,必须介于 2 到 36 之间,或为 0)。如果转换失败,则返回 0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则使用16进制;否则,如果字符串以“0b”开头,则使用2进制;否则,如果字符串以“0”开头,则使用8进制; 否则,采用十进制。

字符串转换始终在“C”区域设置中进行。若需进行与区域设置相关的转换,请使用QLocale::toLongLong()

示例:

QString str = "FF";
bool ok;

qint64 hex = str.toLongLong(&ok, 16);      // hex == 255, ok == true
qint64 dec = str.toLongLong(&ok, 10);      // dec == 0, ok == false

该函数会忽略字符串首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toULongLong()、toInt() 以及QLocale::toLongLong()。

QString QString::toLower() const

返回该字符串的小写副本。

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

大小写转换始终按照“C”语言环境进行。若需根据语言环境进行大小写转换,请使用QLocale::toLower()

另请参阅 toUpper() 和QLocale::toLower()。

NSString *QString::toNSString() const

根据QString 创建一个NSString。

该 NSString 将被自动释放。

注意:此 函数仅在 macOS 和 iOS 上可用。

short QString::toShort(bool *ok = nullptr, int base = 10) const

返回将字符串转换为short 格式的结果,转换时使用基数base (默认值为10,必须在2到36之间,或为0)。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以"0x"开头,则使用十六进制;否则,如果字符串以"0b"开头,则使用二进制;否则,如果字符串以"0"开头,则使用八进制; 否则,采用十进制。

字符串转换始终在“C”区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toShort()

示例:

QString str = "FF";
bool ok;

short hex = str.toShort(&ok, 16);   // hex == 255, ok == true
short dec = str.toShort(&ok, 10);   // dec == 0, ok == false

该函数会忽略字符串首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toUShort()、toInt() 以及QLocale::toShort()。

std::string QString::toStdString() const

返回一个包含该QString 中数据的std::string对象。Unicode数据将通过toUtf8()函数转换为8位字符。

此方法主要用于将QString 传递给接受 std::string 对象的函数。

另请参阅 toLatin1()、toUtf8()、toLocal8Bit() 以及QByteArray::toStdString()。

std::u16string QString::toStdU16String() const

返回一个包含此QString 中数据的std::u16string对象。该Unicode数据与utf16()方法返回的数据相同。

另请参阅 utf16()、toStdWString() 和toStdU32String()。

std::u32string QString::toStdU32String() const

返回一个包含此QString 中数据的std::u32string对象。该Unicode数据与toUcs4()方法返回的数据相同。

另请参阅 toUcs4()、toStdWString() 和toStdU16String()。

std::wstring QString::toStdWString() const

返回一个 std::wstring 对象,其中包含此QString 中的数据。 在 wchar_t 宽度为 2 字节的平台上(例如 Windows),该 std::wstring 采用 UTF-16 编码;而在 wchar_t 宽度为 4 字节的平台上(大多数 Unix 系统),则采用 UTF-32 编码。

此方法主要用于将QString 传递给接受std::wstring对象的函数。

另请参阅 utf16()、toLatin1()、toUtf8()、toLocal8Bit()、toStdU16String() 以及toStdU32String() 函数。

uint QString::toUInt(bool *ok = nullptr, int base = 10) const

返回将字符串转换为unsigned int 格式的结果,转换时使用基数base (默认值为10,必须在2到36之间,或为0)。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则使用十六进制;否则,如果字符串以“0b”开头,则使用二进制;否则,如果字符串以“0”开头,则使用八进制; 否则,采用十进制。

字符串转换始终在 'C' 区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toUInt()

示例:

QString str = "FF";
bool ok;

uint hex = str.toUInt(&ok, 16);     // hex == 255, ok == true
uint dec = str.toUInt(&ok, 10);     // dec == 0, ok == false

该函数会忽略首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toInt() 和QLocale::toUInt()。

ulong QString::toULong(bool *ok = nullptr, int base = 10) const

返回将字符串转换为unsigned long 格式的结果,转换时使用基数base (默认值为10,必须在2到36之间,或为0)。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则采用十六进制;否则,如果字符串以“0b”开头,则采用二进制;否则,如果字符串以“0”开头,则采用八进制; 否则,采用十进制。

字符串转换始终在“C”语言环境下进行。若需进行与语言环境相关的转换,请使用QLocale::toULongLong()

示例:

QString str = "FF";
bool ok;

ulong hex = str.toULong(&ok, 16);   // hex == 255, ok == true
ulong dec = str.toULong(&ok, 10);   // dec == 0, ok == false

该函数会忽略首尾的空格。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number() 和QLocale::toUInt()。

qulonglong QString::toULongLong(bool *ok = nullptr, int base = 10) const

返回将字符串转换为unsigned long long 格式的结果,转换时使用基数base (默认值为10,必须在2到36之间,或为0)。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 * `ok ` 设置为 `false` 来报告失败,通过将 * `ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则使用十六进制;否则,如果字符串以“0b”开头,则使用二进制;否则,如果字符串以“0”开头,则使用八进制; 否则,采用十进制。

字符串转换始终在“C”区域设置下进行。若需进行与区域设置相关的转换,请使用QLocale::toULongLong()

示例:

QString str = "FF";
bool ok;

quint64 hex = str.toULongLong(&ok, 16);    // hex == 255, ok == true
quint64 dec = str.toULongLong(&ok, 10);    // dec == 0, ok == false

该函数会忽略字符串首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toLongLong() 和QLocale::toULongLong()。

ushort QString::toUShort(bool *ok = nullptr, int base = 10) const

返回将字符串转换为unsigned short 格式的结果,转换时使用基数base (默认值为10,必须在2到36之间,或为0)。如果转换失败,则返回0。

如果 `ok ` 不是 `nullptr`,则通过将 `*ok ` 设置为 `false` 来报告失败,通过将 `*ok ` 设置为 `true` 来报告成功。

如果base 为0,则采用C语言约定:如果字符串以“0x”开头,则使用十六进制;否则,如果字符串以“0b”开头,则使用二进制;否则,如果字符串以“0”开头,则使用八进制; 否则,采用十进制。

字符串转换始终在“C”区域设置下进行。若需进行依赖于区域设置的转换,请使用QLocale::toUShort()

示例:

QString str = "FF";
bool ok;

ushort hex = str.toUShort(&ok, 16);     // hex == 255, ok == true
ushort dec = str.toUShort(&ok, 10);     // dec == 0, ok == false

该函数会忽略字符串首尾的空白字符。

注意: 对“0b”前缀的支持 是在 Qt 6.4 中添加的。

另请参阅 number()、toShort() 和QLocale::toUShort()。

QList<uint> QString::toUcs4() const

返回该字符串的UCS-4/UTF-32表示形式,类型为QList<uint>。

UTF-32 是一种 Unicode 编码方案,因此属于无损编码。该字符串中的所有字符都将采用 UTF-32 进行编码。该字符串中任何无效的码单元序列都会被替换为 Unicode 替换字符(QChar::ReplacementCharacter ,对应于U+FFFD )。

返回的列表不以 0 结尾。

另请参阅 fromUtf8()、toUtf8()、toLatin1()、toLocal8Bit()、QStringEncoder 、fromUcs4(),以及toWCharArray()。

QString QString::toUpper() const

返回该字符串的大写版本。

QString str = "TeXt";
str = str.toUpper();        // str == "TEXT"

大小写转换始终按照“C”语言环境进行。若需根据语言环境进行大小写转换,请使用QLocale::toUpper()。

注意:在 某些情况下,字符串的大写形式可能比原始字符串更长。

注意:自 2024年起 ,德语官方建议将 ß(U+00DF 拉丁小写字母尖 S)转换为 ẞ(U+1E9E 拉丁大写字母尖 S)。 Qt XML 的实现遵循 Unicode 标准,该标准仍规定必须使用“SS”。若需遵循新的德语规则,您需要在调用此函数前手动调用replace(u'ß', u'ẞ') 。

另请参阅 toLower() 和QLocale::toLower()。

QByteArray QString::toUtf8() const

返回该字符串的 UTF-8 表示形式,即一个 `QByteArray` 对象。

UTF-8 是一种 Unicode 编码方案,能够表示 Unicode 字符串中的所有字符,例如QString 。

另请参阅 fromUtf8()、toLatin1()、toLocal8Bit() 以及QStringEncoder 。

qsizetype QString::toWCharArray(wchar_t *array) const

将此QString 对象中的数据填入array 中。在 wchar_t 宽度为 2 字节的平台上(例如 Windows),该数组采用 UTF-16 编码;在 wchar_t 宽度为 4 字节的平台上(大多数 Unix 系统),则采用 UTF-32 编码。

array 该数组必须由调用方预先分配,且需包含足够空间以容纳完整的字符串(将数组长度设为与字符串长度相同通常已足够)。

该函数返回字符串的实际长度,单位为array 。

注意:此 函数不会在数组末尾追加空字符。

另请参阅 utf16()、toUcs4()、toLatin1()、toUtf8()、toLocal8Bit()、toStdWString() 和QStringView::toWCharArray()。

[noexcept(...), since 6.0] template <typename Needle, typename... Flags> auto QString::tokenize(Needle &&sep, Flags... flags) &&

[noexcept(...), since 6.0] template <typename Needle, typename... Flags> auto QString::tokenize(Needle &&sep, Flags... flags) const &&

[noexcept(...), since 6.0] template <typename Needle, typename... Flags> auto QString::tokenize(Needle &&sep, Flags... flags) const &

在遇到 `sep ` 的位置将字符串拆分为子字符串视图,并返回这些字符串的懒序列。

等效于

return QStringTokenizer{std::forward<Needle>(sep), flags...};

,不同之处在于它即使在编译器未启用 C++17 类模板参数推导(CTAD)的情况下也能正常工作。

有关 `sep ` 和 `flags ` 如何协同作用形成结果,请参阅QStringTokenizer 。

注意:虽然 此函数返回QStringTokenizer ,但绝、对、不、要显式命名其模板参数。如果可以使用 C++17 类模板参数推导 (CTAD),则可以编写

QStringTokenizer result = sv.tokenize(sep);

(无需模板参数)。若无法使用 C++17 CTAD,则必须仅将返回值存储在auto 变量中:

auto result = sv.tokenize(sep);

这是因为QStringTokenizer 的模板参数与返回它们的具体tokenize()重载之间存在非常微妙的依赖关系,而且这些参数通常并不对应于分隔符所使用的类型。

这些函数在 Qt 6.0 中引入。

注意: 当 `noexcept(qTokenize(std::declval<QString>(), std::forward<Needle>(needle), flags...)) ` 为 `true()` 重载形式时,( 1) 为 `noexcept`。

注意: 当noexcept(qTokenize(std::declval<const QString>(), std::forward<Needle>(needle), flags...)) 为true 时,( 2) 为 noexcept。

注意: 当noexcept(qTokenize(std::declval<const QString &>(), std::forward<Needle>(needle), flags...)) 为true 时,( 3)为noexcept。

另请参见 QStringTokenizer 和qTokenize()。

QString QString::trimmed() const

返回一个已去除首尾空格的字符串。

空格指任何使 `QChar::isSpace()` 返回 `true` 的字符。这包括 ASCII 字符 '\t'、'\n'、'\v'、'\f'、'\r' 以及 ' '。

示例:

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

与 `simplified()` 不同,`trimmed()` 不会处理内部的空白字符。

另请参阅 simplified()。

void QString::truncate(qsizetype position)

截取从索引position 处的元素开始(包含该元素)的字符串。

如果指定的索引position 超出了字符串的末尾,则不执行任何操作。

示例:

QString str = "Vladivostok";
str.truncate(4);
// str == "Vlad"

如果position 为负数,则等同于传入零。

另请参阅 chop()、resize()、first() 和QStringView::truncate()。

const QChar *QString::unicode() const

返回该字符串的 Unicode 表示形式。该结果在字符串被修改之前始终有效。

注意: 返回的字符串可能不以 '\0' 结尾。请使用size() 来确定数组的长度。

另请参阅 setUnicode()、utf16() 和fromRawData()。

[static] QString QString::vasprintf(const char *cformat, va_list ap)

该方法与 `asprintf()` 功能等同,但接受 `va_list`ap 而非可变参数列表。有关 `cformat` 的说明,请参阅 `asprintf()` 的文档。

此方法不会调用 va_end 宏,调用方需自行在ap 上调用 va_end。

另请参阅 asprintf()。

[noexcept, since 6.7] QString::operator std::u16string_view() const

将此QString 对象转换为std::u16string_view 对象。

该函数首次出现在 Qt 6.7 中。

QString &QString::operator+=(const QString &other)

将字符串other 追加到该字符串的末尾,并返回该字符串的引用。

示例:

QString x = "free";
QString y = "dom";
x += y;
// x == "freedom"

该操作通常非常快(常数时间),因为 `QString ` 会在字符串数据的末尾预先分配额外空间,从而无需每次都重新分配整个字符串即可实现字符串长度增长。

另请参阅 append() 和prepend()。

QString &QString::operator+=(QChar ch)

将字符ch 追加到字符串末尾。

该函数重载了QString::operator+=() 函数。

QString &QString::operator+=(QLatin1StringView str)

将由str 解析的Latin-1字符串追加到此字符串后。

此函数重载了QString::operator+=()。

[since 6.0] QString &QString::operator+=(QStringView str)

将字符串视图 `str ` 追加到该字符串后。

此函数重载了QString::operator+=()。

该函数在 Qt 6.0 中引入。

[since 6.5] QString &QString::operator+=(QUtf8StringView str)

将 UTF-8 字符串视图 `str ` 追加到该字符串中。

此函数重载了QString::operator+=()。

该函数于 Qt 6.5 中引入。

QString &QString::operator+=(const QByteArray &ba)

将字节数组ba 追加到此字符串中。该字节数组将通过fromUtf8()函数转换为Unicode。如果ba 字节数组中嵌入了任何NUL字符('\0'),这些字符也会被包含在转换过程中。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此功能。例如,若您希望确保所有用户可见的字符串都经过QObject::tr()处理,此方法便非常有用。

该函数重载了QString::operator+=()。

QString &QString::operator+=(const char *str)

将字符串str 附加到该字符串后。该const char指针将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此函数。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,此方法便十分有用。

该函数重载了QString::operator+=()。

[noexcept] QString &QString::operator=(QString &&other)

将other 通过Move操作赋值给此QString 实例。

[noexcept] QString &QString::operator=(const QString &other)

将other 赋值给该字符串,并返回该字符串的引用。

QString &QString::operator=(QChar ch)

将字符串设置为仅包含字符ch 。

该函数重载了QString::operator=()。

QString &QString::operator=(QLatin1StringView str)

将str 所表示的Latin-1字符串赋值给此字符串。

此函数重载了QString::operator=()。

QString &QString::operator=(const QByteArray &ba)

将ba 赋值给此字符串。该字节数组将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,此方法会非常有用。

该函数重载了QString::operator=()。

QString &QString::operator=(const char *str)

将str 赋值给该字符串。该const char指针将通过fromUtf8()函数转换为Unicode。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 或QT_RESTRICTED_CAST_FROM_ASCII 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr()处理,此方法便十分有用。

该函数重载了QString::operator=()。

QChar &QString::operator[](qsizetype position)

返回字符串中位于指定position 处的字符,并将其作为可修改的引用返回。

示例:

QString str;

if (str[0] == QChar('?'))
    str[0] = QChar('_');

另请参阅 at()。

const QChar QString::operator[](qsizetype position) const

该函数重载了QString::operator[]()。

相关的非成员

[since 6.1] template <typename T> qsizetype erase(QString &s, const T &t)

从字符串s 中移除所有与t 相等的元素。如果移除了元素,则返回移除的元素个数。

该函数在 Qt 6.1 中引入。

另请参阅 erase_if 。

[since 6.1] template <typename Predicate> qsizetype erase_if(QString &s, Predicate pred)

从字符串s 中移除所有满足谓词pred 的元素。返回移除的元素个数(如有)。

该函数在 Qt 6.1 中引入。

另请参阅 erase 。

[noexcept] bool operator!=(const QByteArray &lhs, const QString &rhs)

如果字节数组 `lhs ` 与 `rhs` 的 UTF-8 编码不一致,则返回 `true `;否则返回 `false`。

该比较区分大小写。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。如果要在进行比较之前将字节数组转换为QString ,则需要显式调用QString::fromUtf8()、QString::fromLatin1() 或QString::fromLocal8Bit()。

[noexcept] bool operator!=(const QString &lhs, const QString &rhs)

如果字符串lhs 不等于字符串rhs ,则返回true ;否则返回false 。

另请参阅 Comparing Strings 。

[noexcept] bool operator!=(const char *const &lhs, const QString &rhs)

如果lhs 不等于rhs ,则返回true ;否则返回false 。

对于lhs!= 0,这等同于compare( lhs ,rhs ) != 0 。请注意,没有任何字符串等同于lhs 为 0。

[noexcept] bool operator!=(const QString &lhs, const QByteArray &rhs)

rhs 字节数组将被转换为QUtf8StringView 。如果字节数组中嵌入了任何 NUL 字符('\0'),这些字符也将包含在转换中。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,此方法会很有用。

该函数重载了QString::operator!=()。

[noexcept] bool operator!=(const QString &lhs, const QLatin1StringView &rhs)

如果字符串lhs 不等于字符串rhs ,则返回true ;否则返回false 。

该函数重载了QString::operator!=()。

[noexcept] bool operator!=(const QString &lhs, const char *const &rhs)

rhs 常量字符指针会被转换为QUtf8StringView 。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都通过 `QObject::tr()` 处理,这将非常有用。

该函数重载了QString::operator!=()。

[noexcept, since 6.4] QString operator""_s(const char16_t *str, size_t size)

一个字面量运算符,它从字符串字面量 `str` 的前 `size ` 个字符中生成一个 `QString `。

该QString 在编译时创建,生成的字符串数据存储在编译后对象文件的只读段中。重复的字面量可能共享同一块只读内存。此功能与QStringLiteral 功能等效,但在代码中存在大量字符串字面量时可节省输入工作量。

以下代码创建了一个QString :

using namespace Qt::StringLiterals;

auto str = u"hello"_s;

该函数于 Qt 6.4 版本中引入。

另请参阅 Qt::Literals::StringLiterals 。

QString operator+(QString &&s1, const QString &s2)

QString operator+(const QString &s1, const QString &s2)

返回一个字符串,该字符串是s1 和s2 拼接后的结果。

[since 6.9] QString operator+(QStringView lhs, const QString &rhs)

[since 6.9] QString operator+(const QString &lhs, QStringView rhs)

返回一个字符串,该字符串由 `lhs ` 和 `rhs` 拼接而成。

这些函数是在 Qt 6.9 中引入的。

QString operator+(const QString &s1, const char *s2)

返回一个字符串,该字符串由s1 和s2 拼接而成(其中s2 通过QString::fromUtf8() 函数转换为 Unicode)。

另请参阅 QString::fromUtf8()。

QString operator+(const char *s1, const QString &s2)

返回一个字符串,该字符串由s1 和s2 拼接而成(其中s1 通过QString::fromUtf8() 函数转换为 Unicode)。

另请参阅 QString::fromUtf8()。

[noexcept] bool operator<(const QByteArray &lhs, const QString &rhs)

如果字节数组lhs 在字面意义上小于rhs 的 UTF-8 编码,则返回true ;否则返回false 。

该比较区分大小写。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。如果要在进行比较之前将字节数组转换为QString ,则需要显式调用QString::fromUtf8()、QString::fromLatin1() 或QString::fromLocal8Bit()。

[noexcept] bool operator<(const char *const &lhs, const QString &rhs)

如果 `lhs ` 在词法上小于 `rhs`,则返回 `true `;否则返回 `false`。对于 `lhs ` ≠ 0,这等同于 `compare(lhs, rhs) < 0`。

另请参阅 Comparing Strings 。

[noexcept] bool operator<(const QLatin1StringView &lhs, const QString &rhs)

如果 `lhs ` 在词法意义上小于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator<()。

[noexcept] bool operator<(const QString &lhs, const QByteArray &rhs)

rhs 字节数组会被转换为QUtf8StringView 。如果字节数组中嵌入了任何 NUL 字符('\0'),这些字符也会被包含在转换中。

您可以在编译应用程序时禁用此QT_NO_CAST_FROM_ASCII 运算符。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,此操作将非常有用。

该函数重载了QString::operator<()。

[noexcept] bool operator<(const QString &lhs, const QLatin1StringView &rhs)

如果 `lhs ` 在词法上小于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator<()。

[noexcept] bool operator<(const QString &lhs, const QString &rhs)

如果字符串lhs 在词法上小于字符串rhs ,则返回true ;否则返回false 。

此函数重载了QString::operator<()。

另请参阅 Comparing Strings 。

[noexcept] bool operator<(const QString &lhs, const char *const &rhs)

如果字符串lhs 在词法上小于字符串rhs ,则返回true ;否则返回false 。

常量字符指针 `rhs ` 将被转换为 `QUtf8StringView`。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都通过QObject::tr() 处理,这将非常有用。

该函数重载了QString::operator<()。

QDataStream &operator<<(QDataStream &stream, const QString &string)

将给定的string 写入指定的stream 。

另请参阅 《Qt 数据类型的序列化》。

[noexcept] bool operator<=(const QByteArray &lhs, const QString &rhs)

如果字节数组 `lhs ` 在字面量上小于或等于 `rhs` 的 UTF-8 编码,则返回 `true `;否则返回 `false`。

该比较区分大小写。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。如果要在进行比较之前将字节数组转换为QString ,则需要显式调用QString::fromUtf8()、QString::fromLatin1() 或QString::fromLocal8Bit()。

[noexcept] bool operator<=(const QString &lhs, const QString &rhs)

如果字符串lhs 在词法上小于或等于字符串rhs ,则返回true ;否则返回false 。

另请参阅 Comparing Strings 。

[noexcept] bool operator<=(const char *const &lhs, const QString &rhs)

如果lhs 的词法顺序小于或等于rhs ,则返回true ;否则返回false 。当lhs!= 0 时,这等同于compare(lhs, rhs) <= 0 。

另请参阅 Comparing Strings 。

[noexcept] bool operator<=(const QLatin1StringView &lhs, const QString &rhs)

如果 `lhs ` 在词法上小于或等于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator<=()。

[noexcept] bool operator<=(const QString &lhs, const QByteArray &rhs)

rhs 字节数组将被转换为QUtf8StringView 。如果字节数组中嵌入了任何NUL字符('\0'),这些字符也将被包含在转换中。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,此方法便十分有用。

该函数重载了QString::operator<=()。

[noexcept] bool operator<=(const QString &lhs, const QLatin1StringView &rhs)

如果 `lhs ` 的词法顺序小于或等于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator<=()。

[noexcept] bool operator<=(const QString &lhs, const char *const &rhs)

rhs 常量字符指针会被转换为QUtf8StringView 。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,这将非常有用。

该函数重载了QString::operator<=()。

[noexcept] bool operator==(const QByteArray &lhs, const QString &rhs)

如果字节数组 `lhs ` 等于 `rhs` 的 UTF-8 编码,则返回 `true `;否则返回 `false`。

该比较区分大小写。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。如果要在进行比较之前将字节数组转换为QString ,则需要显式调用QString::fromUtf8()、QString::fromLatin1() 或QString::fromLocal8Bit()。

[noexcept] bool operator==(const QLatin1StringView &lhs, const QString &rhs)

如果lhs 等于rhs ,则返回true ;否则返回false 。

该函数重载了QString::operator==()。

[noexcept] bool operator==(const QString &lhs, const QByteArray &rhs)

rhs 字节数组会被转换为QUtf8StringView 。

您可以在编译应用程序时定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,这将非常有用。

如果字符串lhs 与rhs 在词法上相等,则返回true ;否则返回false 。

该函数重载了QString::operator==()。

[noexcept] bool operator==(const QString &lhs, const QLatin1StringView &rhs)

如果lhs 等于rhs ,则返回true ;否则返回false 。

该函数重载了QString::operator==()。

[noexcept] bool operator==(const QString &lhs, const QString &rhs)

如果字符串lhs 与字符串rhs 相等,则返回true ;否则返回false 。

注意:此 函数将空字符串与空字符串视为等同,更多详情请参阅Distinction Between Null and Empty Strings 。

此函数重载了QString::operator==()。

另请参阅 Comparing Strings 。

[noexcept] bool operator==(const QString &lhs, const char *const &rhs)

rhs 常量字符指针会被转换为QUtf8StringView 。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,此方法会非常有用。

该函数重载了QString::operator==()。

[noexcept] bool operator==(const char *const &lhs, const QString &rhs)

如果 `lhs ` 等于 `rhs`,则返回 `true `;否则返回 `false`。请注意,没有任何字符串等于 `lhs ` 为 0。

等同于lhs != 0 && compare(lhs, rhs) == 0 。

该函数重载了QString::operator==()。

[noexcept] bool operator>(const QByteArray &lhs, const QString &rhs)

如果字节数组lhs 在字面量上大于rhs 的 UTF-8 编码,则返回true ;否则返回false 。

该比较区分大小写。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。如果要在进行比较之前将字节数组转换为QString ,则需要显式调用QString::fromUtf8()、QString::fromLatin1() 或QString::fromLocal8Bit()。

[noexcept] bool operator>(const QString &lhs, const QString &rhs)

如果字符串lhs 在词法上大于字符串rhs ,则返回true ;否则返回false 。

另请参阅 Comparing Strings 。

[noexcept] bool operator>(const char *const &lhs, const QString &rhs)

如果 `lhs ` 在词法上大于 `rhs`,则返回 `true `;否则返回 `false`。等同于 `compare(lhs, rhs) > 0`。

另请参阅 Comparing Strings 。

[noexcept] bool operator>(const QLatin1StringView &lhs, const QString &rhs)

如果 `lhs ` 在词法上大于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator>()。

[noexcept] bool operator>(const QString &lhs, const QByteArray &rhs)

rhs 字节数组将被转换为QUtf8StringView 。如果字节数组中嵌入了任何NUL字符('\0'),这些字符也将包含在转换中。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,此方法将非常有用。

该函数重载了QString::operator>()。

[noexcept] bool operator>(const QString &lhs, const QLatin1StringView &rhs)

如果 `lhs ` 在词法上大于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator>()。

[noexcept] bool operator>(const QString &lhs, const char *const &rhs)

rhs 常量字符指针会被转换为QUtf8StringView 。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,这将非常有用。

该函数重载了QString::operator>()。

[noexcept] bool operator>=(const QByteArray &lhs, const QString &rhs)

如果字节数组lhs 大于或等于rhs 的 UTF-8 编码,则返回true ;否则返回false 。

该比较区分大小写。

您可以在编译应用程序时定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。如果要在进行比较之前将字节数组转换为QString ,则需要显式调用QString::fromUtf8()、QString::fromLatin1() 或QString::fromLocal8Bit()。

[noexcept] bool operator>=(const QString &lhs, const QString &rhs)

如果字符串lhs 的词法顺序大于或等于字符串rhs ,则返回true ;否则返回false 。

另请参阅 Comparing Strings 。

[noexcept] bool operator>=(const char *const &lhs, const QString &rhs)

如果 `lhs ` 的词法大小大于或等于 `rhs`,则返回 `true `;否则返回 `false`。当 `lhs ` ≠ 0 时,这等同于 `compare(lhs, rhs) >= 0`。

另请参阅 Comparing Strings 。

[noexcept] bool operator>=(const QLatin1StringView &lhs, const QString &rhs)

如果 `lhs ` 的词法顺序大于或等于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator>=()。

[noexcept] bool operator>=(const QString &lhs, const QByteArray &rhs)

rhs 字节数组将被转换为QUtf8StringView 。如果字节数组中嵌入了任何NUL字符('\0'),这些字符也将包含在转换中。

您可以在编译应用程序时通过定义QT_NO_CAST_FROM_ASCII 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过QObject::tr() 处理,此方法会非常有用。

该函数重载了QString::operator>=()。

[noexcept] bool operator>=(const QString &lhs, const QLatin1StringView &rhs)

如果 `lhs ` 的词法大小大于或等于 `rhs`,则返回 `true `;否则返回 `false`。

该函数重载了QString::operator>=()。

[noexcept] bool operator>=(const QString &lhs, const char *const &rhs)

rhs 常量字符指针会被转换为QUtf8StringView 。

您可以在编译应用程序时通过定义 `QT_NO_CAST_FROM_ASCII ` 来禁用此运算符。例如,如果您希望确保所有用户可见的字符串都经过 `QObject::tr()` 处理,这将非常有用。

该函数重载了QString::operator>=()。

QDataStream &operator>>(QDataStream &stream, QString &string)

从指定的stream 中读取一个字符串,并将其写入给定的string 中。

另请参阅 《Qt 数据类型的序列化》。

宏文档

QStringLiteral(str)

该宏在编译时根据字符串常量str 生成QString 的数据。在此情况下,基于该数据创建QString 是免费的,且生成的字符串数据存储在编译后目标文件的只读段中。

如果您的代码如下所示:

// hasAttribute takes a QString argument
if (node.hasAttribute("http-contents-length")) {
    //...
}

那么系统会创建一个临时 `QString `,将其作为 `hasAttribute ` 函数的参数传递。这可能会相当耗时,因为它涉及内存分配以及将数据复制/转换为 `QString` 的内部编码。

若改用 QStringLiteral,则可避免此开销:

if (node.hasAttribute(QStringLiteral(u"http-contents-length"))){
    //...
}

在这种情况下,QString 的内部数据将在编译时生成;运行时不会发生任何转换或内存分配。

使用 QStringLiteral 代替双引号的普通 C++ 字符串字面量,可以显著加快从编译时已知的数据创建QString 实例的速度。

注意: 当字符串被传递给一个具有QLatin1StringView 重载的函数,且该重载避免了转换为QString 时,QLatin1StringView 仍可能比QStringLiteral更高效。例如,QString::operator==()可以直接与QLatin1StringView 进行比较:

if (attribute.name() == "http-contents-length"_L1){
    //...
}

注意:某些 编译器在编码包含 US-ASCII 字符集以外字符的字符串时存在缺陷。在这种情况下,请确保在字符串前添加u 前缀。否则,该前缀是可选的。

注意:QStringLiteral 与operator""_s 可互换使用。当代码中包含大量字符串字面量时,后者可节省输入时间。

另请参阅 QByteArrayLiteral 。

QT_NO_CAST_FROM_ASCII

禁用将 8 位字符串(char * )自动转换为 Unicode QStrings,以及将 8 位char 类型(char 和unsigned char )自动转换为QChar 。

另请参阅 QT_NO_CAST_TO_ASCII 、QT_RESTRICTED_CAST_FROM_ASCII 以及QT_NO_CAST_FROM_BYTEARRAY 。

QT_NO_CAST_TO_ASCII

禁用将QString 自动转换为8位字符串的功能(char * )。

另请参阅 QT_NO_CAST_FROM_ASCII 、QT_RESTRICTED_CAST_FROM_ASCII 以及QT_NO_CAST_FROM_BYTEARRAY 。

QT_RESTRICTED_CAST_FROM_ASCII

禁用将源字符常量和 8 位数据转换为 Unicode QString 的大部分自动转换,但允许使用QChar(char) 和QString(const char (&ch)[N] 构造函数,以及QString::operator=(const char (&ch)[N]) 赋值运算符。这提供了QT_NO_CAST_FROM_ASCII 的大部分类型安全优势,但无需用户代码使用QLatin1Char 、QLatin1StringView 或类似方法对字符和字符串常量进行封装。

若将此宏与超出 7 位范围的源字符串、非字面量或包含嵌入 NUL 字符的字面量结合使用,其行为未定义。

另请参阅 QT_NO_CAST_FROM_ASCII 和QT_NO_CAST_TO_ASCII 。

const char *qPrintable(const QString &str)

将str 作为const char * 返回。这等同于str 、toLocal8Bit()和constData()。

在使用 qPrintable() 的语句执行完毕后,该字符指针将失效。这是因为QString::toLocal8Bit() 返回的数组将超出作用域。

注意: qDebug()、qInfo()、qWarning()、qCritical()、qFatal() 均要求 %s 参数采用 UTF-8 编码,而 qPrintable() 会将其转换为本地 8 位编码。因此,在记录字符串时应使用qUtf8Printable() 而不是 qPrintable()。

另请参阅 qUtf8Printable()。

const wchar_t *qUtf16Printable(const QString &str)

将str 作为const ushort * 返回,但将其强制转换为const wchar_t * 以避免警告。这相当于str.utf16()加上一些强制转换。

该宏的返回值唯一有用的用途是将其传递给QString::asprintf(),用于%ls 转换。特别需要注意的是,该返回值并非有效的const wchar_t* !

通常情况下,在使用 qUtf16Printable() 的语句之后,该指针将失效。这是因为该指针可能是从一个临时表达式中获取的,而该表达式将超出作用域。

示例:

qWarning("%ls: %ls", qUtf16Printable(key), qUtf16Printable(value));

另请参阅 qPrintable()、qDebug()、qInfo()、qWarning()、qCritical() 以及qFatal()。

const char *qUtf8Printable(const QString &str)

返回一个const char * ,其值为str 。这等同于str 、toUtf8()和constData()。

在使用 qUtf8Printable() 的语句执行完毕后,该字符指针将失效。这是因为QString::toUtf8() 返回的数组将超出作用域。

示例:

qWarning("%s: %s", qUtf8Printable(key), qUtf8Printable(value));

另请参阅 qPrintable()、qDebug()、qInfo()、qWarning()、qCritical() 以及qFatal()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.