QString sinfi

Izoh:Ushbu sinfdagi barcha funktsiyalar qayta taqdim etiladi.

Ommaviy turlari

typedef ConstIterator
typedef Takrorlovchi
enum Normallashtirish shakli
enum Bo'lim bayrog'i
bayroqlar Bo'lim bayroqlari
typedef const_iterator
typedef const_pointer
typedef const_reference
typedef const_reverse_iterator
typedef farq turi
typedef iterator
typedef ko'rsatgich
typedef ma'lumotnoma
typedef teskari_iterator
typedef hajmi_tipi
typedef qiymat_tipi

Jamoat vazifalari

Statik jamoat a'zolari

QString asprintf(const char * cformat, .)
int taqqoslash(const QString & s1, const QString & s2, Qt :: CaseSensitivity cs= Qt :: CaseSensitive)
int taqqoslash(const QString & s1, QLatin1String s2, Qt :: CaseSensitivity cs= Qt :: CaseSensitive)
int taqqoslash(QLatin1String s1, const QString & s2, Qt :: CaseSensitivity cs= Qt :: CaseSensitive)
int taqqoslash(const QString & s1, const QStringRef & s2, Qt :: CaseSensitivity cs= Qt :: CaseSensitive)
QString fromCFString(CFStringRef qatori)
QString Lotin1(const char * str, int hajmi= -1)
QString fromLatin1(const QByteArray & str)
QString fromLocal8Bit(const char * str, int size= -1)
QString fromLocal8Bit(const QByteArray & str)
QString fromNSString(const NSString * string)
QString fromRawData(const QChar * unicode, int hajmi)
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 uint * unicode, int hajmi= -1)
QString fromUcs4(const char32_t * str, int size= -1)
QString fromUtf8(const char * str, int size= -1)
QString fromUtf8(const QByteArray & str)
QString fromUtf16(const ushort * unicode, int size= -1)
QString fromUtf16(const char16_t * str, int size= -1)
QString fromWCharArray(const wchar_t * string, int size= -1)
int localeAwareCompare(const QString & s1, const QString & s2)
int localeAwareCompare(const QString & s1, const QStringRef & s2)
QString raqam(uzun n, int asos= 10)
QString raqam(int n, int asos= 10)
QString raqam(uint n, int bazasi= 10)
QString raqam(ulong n, int bazasi= 10)
QString raqam(qlonglong n, int asos= 10)
QString raqam(qulonglong n, int bazasi= 10)
QString raqam(juft n, char formati= 'g', int aniqligi= 6)
QString vasprintf(const char * cformat, va_list ap)

A'zo bo'lmaganlarga tegishli

bool operator! =(const QString & s1, const QString & s2)
bool operator! =(const char * s1, const QString & s2)
const QString operator +(const QString & s1, const QString & s2)
const QString operator +(const QString & s1, const char * s2)
const QString operator +(const char * s1, const QString & s2)
const QString operator +(char ch, const QString & s)
const QString operator +(const QString & s, char ch)
bool operator (const QString & s1, const QString & s2)
bool operator (const char * s1, const QString & s2)
QDataStream &operator (QDataStream & stream, const QString & string)
bool operator (const QString & s1, const QString & s2)
bool operator (const char * s1, const QString & s2)
bool operator ==(const QString & s1, const QString & s2)
bool operator ==(const char * s1, const QString & s2)
bool operator>(const QString & s1, const QString & s2)
bool operator>(const char * s1, const QString & s2)
bool operator>=(const QString & s1, const QString & s2)
bool operator>=(const char * s1, const QString & s2)
QDataStream &operator >>(QDataStream & stream, QString & string)

Makrolar

QStringLiteral( str)
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
QT_RESTRICTED_CAST_FROM_ASCII

Batafsil tavsif

QString 16 bitli QChars qatorini saqlaydi, bu erda har bir QChar bitta UTF-16 kod birligiga mos keladi. (Kod qiymati 65535 dan yuqori bo'lgan Unicode belgilar surrogat juftlari, ya'ni ketma-ket ikkita QChar yordamida saqlanadi.)

Unicode - bu bugungi kunda qo'llanilayotgan yozish tizimlarining aksariyatini qo'llab-quvvatlovchi xalqaro standart. U US-ASCII (ANSI X3.4-1986) va Latin-1 (ISO 8859-1) ning yuqori to'plamidir va barcha US-ASCII / Latin-1 belgilar bir xil kod holatida mavjud.

Sahna ortida QString xotiradan foydalanishni kamaytirish va ma'lumotlarning keraksiz nusxasini olishdan saqlanish uchun maxfiy almashinuvdan foydalanadi (nusxa ko'chirish). Bu, shuningdek, 8-bitli belgilar o'rniga 16-bitli belgilarni saqlashning odatiy xarajatlarini kamaytirishga yordam beradi.

QString bilan bir qatorda, Qt QByteArray sinfini xom baytlar va an'anaviy 8-bit '\ 0' tugagan satrlarni saqlash uchun ham taqdim etadi. Ko'pgina maqsadlar uchun QString siz foydalanmoqchi bo'lgan sinfdir. U Qt API-da ishlatiladi va Unicode-ni qo'llab-quvvatlashi sizning ilovangiz bozorini bir muncha vaqt kengaytirishni istasangiz, sizning ilovalaringizni tarjima qilishni osonlashtiradi. QByteArray mos keladigan ikkita asosiy holat - bu xom ikkilik ma'lumotlarni saqlash kerak bo'lganda va xotirani saqlash juda muhim (ko'milgan tizimlarda bo'lgani kabi).

Stringni ishga tushirish

QStringni ishga tushirishning bir usuli shunchaki const char * ni uning konstruktoriga o'tkazishdir. Masalan, quyidagi kod "Salom" ma'lumotlarini o'z ichiga olgan 5 o'lchamdagi QStringni yaratadi:

QString const char * ma'lumotlarini fromUtf8 () funktsiyasi yordamida Unicode-ga o'zgartiradi.

Const char * parametrlarini qabul qiladigan barcha QString funktsiyalarida const char * UTF-8 da kodlangan klassik C uslubidagi '\ 0'-tugagan satr sifatida talqin etiladi. Const char * parametrining nullptr bo'lishi qonuniydir.

Siz mag'lubiyatga oid ma'lumotlarni QChars qatori sifatida ham taqdim etishingiz mumkin:

QString QChar ma'lumotlarining chuqur nusxasini yaratadi, shuning uchun uni keyinchalik yon ta'sirga duch kelmasdan o'zgartirishingiz mumkin. (Agar ishlash sabablari tufayli belgilar ma'lumotlarining chuqur nusxasini olishni istamasangiz, buning o'rniga QString :: fromRawData () dan foydalaning.)

Yana bir yondashuv - bu resize () yordamida satr hajmini belgilash va har bir belgi bo'yicha ma'lumotlar belgisini boshlashdir. QString C ++ massivlari singari 0 ga asoslangan indekslardan foydalanadi. Belgiga ma'lum bir indeks holatida kirish uchun operatordan foydalanishingiz mumkin [] (). Konst bo'lmagan satrlarda operator [] () topshiriqning chap tomonida ishlatilishi mumkin bo'lgan belgiga havolani qaytaradi. Misol uchun:

Faqat o'qish uchun kirish uchun muqobil sintaksis at () funktsiyasidan foydalanish hisoblanadi:

At () funktsiyasi [] () operatoridan tezroq bo'lishi mumkin, chunki u hech qachon chuqur nusxaning paydo bo'lishiga olib kelmaydi. Shu bilan bir qatorda, bir vaqtning o'zida bir nechta belgilarni ajratib olish uchun left (), right () yoki mid () funktsiyalaridan foydalaning.

QString '\ 0' belgilarini joylashtirishi mumkin (QChar :: Null). Size () funktsiyasi har doim butun qatorning hajmini, shu jumladan o'rnatilgan '\ 0' belgilarini qaytaradi.

Resize () funktsiyasiga qo'ng'iroqdan so'ng, yangi ajratilgan belgilar aniqlanmagan qiymatlarga ega. Satrdagi barcha belgilarni ma'lum bir qiymatga o'rnatish uchun fill () funktsiyasidan foydalaning.

QString mag'lubiyatdan foydalanishni soddalashtirish uchun mo'ljallangan o'nlab ortiqcha yuklarni ta'minlaydi. Masalan, agar siz QStringni harflar qatori bilan taqqoslamoqchi bo'lsangiz, quyidagi kabi kod yozishingiz mumkin va u kutilganidek ishlaydi:

Bundan tashqari, QString (const char *) konstruktorini chaqirib, QStringsni argument sifatida qabul qiladigan funktsiyalarga satrlarni almashtirish mumkin. Xuddi shunday, siz QStringni const char * argumentini qabul qiladigan funktsiyaga qPrintable () so'lidan foydalanib, berilgan QStringni const char * sifatida qaytarib berishingiz mumkin. Bu .toLocal8Bit () chaqiruviga teng. ConstData ().

String ma'lumotlarini manipulyatsiya qilish

QString belgilar ma'lumotlarini o'zgartirish uchun quyidagi asosiy funktsiyalarni taqdim etadi: append (), prepend (), insert (), replace (), and remove (). Misol uchun:

Agar siz QStringni asta-sekin qurayotgan bo'lsangiz va QString tarkibida qancha belgi borligini oldindan bilsangiz, QStringdan ma'lum bir xotirani oldindan taqsimlashni so'rab, zaxira () ga qo'ng'iroq qilishingiz mumkin. QString aslida qancha xotira ajratilganligini bilish uchun () imkoniyatiga qo'ng'iroq qilishingiz mumkin.

Replace () va remove () funktsiyalarining dastlabki ikkita argumenti - bu o'chirishni boshlash pozitsiyasi va o'chirilishi kerak bo'lgan belgilar soni. Agar ma'lum bir substringning barcha hodisalarini boshqasiga almashtirishni xohlasangiz, ikkita parametrli () ortiqcha yuklardan birini ishlating.

Bo'shliq belgilarini satrdan olib tashlash ('\ n', '\ t', '' va boshqalar). Agar siz bo'shliqni QStringning ikkala uchidan olib tashlamoqchi bo'lsangiz, trimmed () funktsiyasidan foydalaning. Agar siz bo'sh joyni ikkala uchidan olib tashlamoqchi bo'lsangiz va ketma-ket bir nechta bo'sh joylarni qator ichidagi bitta bo'shliq belgisi bilan almashtirmoqchi bo'lsangiz, soddalashtirilgan () dan foydalaning.

Agar siz QStringda ma'lum bir belgi yoki pastki satrning barcha hodisalarini topmoqchi bo'lsangiz, indexOf () yoki lastIndexOf () funktsiyalaridan foydalaning. Birinchisi berilgan indeks holatidan boshlab oldinga, ikkinchisi orqaga qarab qidiradi. Ikkalasi ham, agar ular topsa, belgi yoki pastki satrning indeks holatini qaytaradi; aks holda, ular -1 ga qaytadilar. Masalan, ma'lum bir pastki satrning barcha hodisalarini topadigan odatiy tsikl:

QString raqamlarni satrlarga va satrlarni sonlarga aylantirish uchun ko'plab funktsiyalarni taqdim etadi. Arg () funktsiyalari, setNum () funktsiyalari, number () statik funktsiyalari va toInt (), toDouble () va shunga o'xshash funktsiyalarga qarang.

Ipning yuqori yoki kichik versiyasini olish uchun toUpper () yoki toLower () dan foydalaning.

Qatorlar ro'yxati QStringList klassi tomonidan boshqariladi. Siz satrni split () funktsiyasi yordamida satrlar ro'yxatiga ajratishingiz va QStringList :: join () yordamida ixtiyoriy ajratuvchi bilan satrlar ro'yxatini bitta qatorga qo'shishingiz mumkin. QStringList :: filter () funktsiyasi yordamida ma'lum bir pastki qatorni o'z ichiga olgan yoki ma'lum bir QRegExp bilan mos keladigan satrlar ro'yxatidan olishingiz mumkin.

String ma'lumotlarini so'rov qilish

Agar siz QStringning ma'lum bir substring bilan boshlanganligini yoki tugaganligini ko'rishni xohlasangiz, startWith () yoki endsWith () dan foydalaning. Agar siz shunchaki QString tarkibida ma'lum bir belgi yoki pastki satr borligini tekshirishni istasangiz, include () funktsiyasidan foydalaning. Agar satrda ma'lum bir belgi yoki pastki satr necha marta sodir bo'lganligini bilmoqchi bo'lsangiz, count () dan foydalaning.

Haqiqiy belgilar ma'lumotlariga ko'rsatgich olish uchun ma'lumotlarni () yoki constData () ni chaqiring. Ushbu funktsiyalar ko'rsatgichni QChar ma'lumotlarining boshiga qaytaradi. QString-da const bo'lmagan funktsiya chaqirilguncha ko'rsatgichning amal qilishi kafolatlanadi.

Satrlarni taqqoslash

Operator = () va boshqalar kabi ortiqcha yuklangan operatorlar yordamida QStringsni taqqoslash mumkin. Taqqoslash faqat belgilarning raqamli Unicode qiymatlariga asoslanganligini unutmang. Bu juda tez, ammo inson kutgan narsa emas; QString :: localeAwareCompare () funktsiyasi odatda foydalanuvchi interfeysi satrlarini saralash uchun yaxshiroq tanlov bo'lib, bunday taqqoslash mavjud bo'lganda.

Unix-ga o'xshash platformalarda (shu jumladan Linux, macOS va iOS), Qt ICU kutubxonasi bilan bog'langanda (odatda u), uning mahalliy ahamiyatga ega bo'lgan saralashidan foydalaniladi. Aks holda, macOS va iOS-da, localaleAwareCompare () Xalqaro imtiyozlar panelidagi "Saralangan ro'yxatlar uchun buyurtma" parametrlariga ko'ra taqqoslanadi. ICU bo'lmagan boshqa Unix-ga o'xshash tizimlarda taqqoslash tizim kutubxonasining strcoll () ga to'g'ri keladi, agar u satrlarni yuqorida tavsiflangan QString (local-beefare) taqqoslashiga teng deb hisoblasa, orqaga qaytadi,

8-bitli satrlar va Unicode satrlari o'rtasida konvertatsiya qilish

QString QByteArray sifatida satrning const char * versiyasini qaytaradigan quyidagi uchta funktsiyani ta'minlaydi: toUtf8 (), toLatin1 () va toLocal8Bit ().

    () Lotin-1 (ISO 8859-1) kodlangan 8 bitli qatorni qaytaradi. () UTF-8 kodlangan 8-bitli mag'lubiyatni qaytaradi. UTF-8 - ko'p baytli ketma-ketliklar orqali o'rnatilgan butun Unicode belgilarini qo'llab-quvvatlaydigan US-ASCII (ANSI X3.4-1986) ning yuqori to'plamidir. () tizimning mahalliy kodlashidan foydalanib 8-bitli qatorni qaytaradi.

Ushbu kodlashlardan biriga aylantirish uchun QString fromLatin1 (), fromUtf8 () va fromLocal8Bit () ni taqdim etadi. Boshqa kodlashlar QTextCodec klassi orqali qo'llab-quvvatlanadi.

Yuqorida aytib o'tilganidek, QString const char * satrlari bilan ishlashni osonlashtiradigan juda ko'p funktsiyalar va operatorlarni taqdim etadi. Ammo bu funktsionallik ikki qirrali qilich: QStringni barcha satrlar US-ASCII yoki Lotin-1 bo'lsa, ulardan foydalanishni yanada qulayroq qiladi, ammo har doim yoki to'g'ridan-to'g'ri char * ga yopiq konvertatsiya qilish xato bo'lishi mumkin. 8-bitli kodlash. Ushbu xatarlarni minimallashtirish uchun siz quyidagi preprocessor belgilaridan ba'zilarini belgilash orqali ushbu konvertatsiyani o'chirib qo'yishingiz mumkin:

    C string literal va ko'rsatgichlardan Unicode-ga avtomatik konversiyani o'chiradi. C belgilaridan va belgilar massividan avtomatik konversiyalarga ruxsat beradi, ammo belgilar ko'rsatgichlaridan Unicode-ga avtomatik konvertatsiya qilishni o'chiradi. avtomatik ravishda QString-dan C satrlariga o'tkazishni o'chiradi.

Keyin 8-bitli magistraldan QString qurish uchun aniqUtf8 (), fromLatin1 () yoki fromLocal8Bit () ga qo'ng'iroq qilishingiz yoki engil QLatin1String sinfidan foydalanishingiz kerak, masalan:

Xuddi shunday, siz QStringni 8-bitli mag'lubiyatga aylantirish uchun toLatin1 (), toUtf8 () yoki toLocal8Bit () ga aniq qo'ng'iroq qilishingiz kerak. (Boshqa kodlashlar QTextCodec klassi orqali qo'llab-quvvatlanadi.)

Natijada o'zgaruvchisi, bu stekka ajratilgan oddiy o'zgaruvchidir. Qaytish chaqirilganda va biz qiymat bo'yicha qaytib kelayotganimiz sababli nusxa ko'chirish konstruktori chaqiriladi va satr nusxasi qaytariladi. Yashirin almashinuv tufayli haqiqiy nusxa ko'chirish amalga oshirilmaydi.

Null va bo'sh satrlar orasidagi farq

Tarixiy sabablarga ko'ra QString bo'sh satr va bo'sh satrni ajratib turadi. A nulltor QString ning standart bunyodkori yordamida boshlash yoki ijobiy uchun (const char *) 0 o'tib tomonidan bir mag'lubiyatga. An bo'shtor har doim bo'sh hajmi 0. NULL yengdi bilan har qanday mag'lubiyatga bo'ladi, lekin bo'sh tor, albatta null emas:

IsNull () dan tashqari barcha funktsiyalar null satrlarni bo'sh satrlar bilan bir xil ishlaydi. Masalan, toUtf8 (). ConstData () bo'sh satr uchun '\ 0' belgisiga to'g'ri ko'rsatgichni qaytaradi (nullptr emas). Sizga doimo isEmpty () funktsiyasidan foydalanishni va isNull () dan qochishingizni tavsiya qilamiz.

Argument formatlari

Argument formati ko'rsatilishimumkin bo'lgan a'zo funktsiyalarida (masalan, arg (), number ()), argument formatiquyidagilardan biri bo'lishi mumkin:

Formatlash Ma'nosi
e formatini [-] 9.9e [+ | -] 999
E formatini [-] 9.9E [+ | -] 999
f formatini [-] 9.9
g e yoki f formatidan foydalaning, qaysi biri eng ixcham bo'lsa
G qaysi biri eng ixcham bo'lsa, E yoki f formatidan foydalaning

A aniqlikham argument bilan belgilanadi formatda. 'E', 'E' va 'f' formatlari uchun aniqliko'nli kasrdan keyingiraqamlar sonini bildiradi. 'G' va 'G' formatlari uchun aniqlikmaksimal sonli raqamlarni bildiradi (oxirgi nollar chiqarib tashlanadi).

Iplarni yanada samarali qurish

Ko'p qatorlar kompilyatsiya vaqtida ma'lum. Ammo ahamiyatsiz konstruktor QString ("Salom"), mag'lubiyat tarkibini Lotin-1 deb hisoblagan holda nusxasini ko'chiradi. Buning oldini olish uchun QStringLiteral so'lini kompilyatsiya vaqtida to'g'ridan-to'g'ri kerakli ma'lumotlarni yaratish uchun ishlatishingiz mumkin. QStringni tom ma'noda qurish, keyinchalik ish vaqtida ortiqcha xarajatlarni keltirib chiqarmaydi.

QLatin1String-dan foydalanish biroz kamroq samarali usul. Bu sinf C simvolini o'raladi, kompilyatsiya vaqtida uning uzunligini oldindan hisoblab chiqadi va undan keyin QStrings bilan tezroq taqqoslash va QStrings-ga konvertatsiya qilish uchun oddiy C satr harflaridan ko'ra foydalanish mumkin.

QString '+' operatoridan foydalanib, bir nechta pastki satrlardan murakkab mag'lubiyatni qurish oson. Siz ko'pincha quyidagi kabi kod yozasiz:

Ushbu satrlarning ikkalasida ham yomon narsa yo'q, lekin bir nechta yashirin samarasizliklar mavjud. Qt 4.6 dan boshlab ularni yo'q qilishingiz mumkin.

Birinchidan, '+' operatorining bir nechta ishlatilishi odatda ko'p sonli xotira ajratilishini anglatadi. Bitiştirmek qachon nqism satr, qaerda n>2, deb ko'p bor bo'lishi mumkin : 1 - nxotira allocator chaqiradi.

4.6-da, bir nechta yordamchi funktsiyalar bilan bir qatorda QStringBuilder ichki shablon klassi qo'shildi. Ushbu sinf ichki deb belgilangan va hujjatlarda ko'rinmaydi, chunki siz uni o'zingizning kodingizda o'rnatishingiz kerak emas. Quyida aytib o'tilganidek, uni ishlatish avtomatik bo'ladi. Agar siz unga qarashni istasangiz, sinf src / corelib / tools / qstringbuilder.cpp da joylashgan.

QStringBuilder ifoda shablonlarini ishlatadi va '%' operatorini qayta bajaradi, shunda '+' o'rniga mag'lubiyatni birlashtirish uchun '%' dan foydalanganda, yakuniy natija QStringga berilgunga qadar bir nechta substring birikmalari qoldiriladi. Shu nuqtada yakuniy natija uchun zarur bo'lgan xotira miqdori ma'lum bo'ladi. Keyin kerakli joyni olish uchun xotira ajratuvchisi bir martachaqiriladi va pastki satrlar unga birma-bir ko'chiriladi.

Qo'shimcha samaradorlik inline va qisqartirilgan mos yozuvlar hisobi bilan erishiladi (QStringBuilder-dan yaratilgan QString odatda ref 1ga teng, QString :: append () esa qo'shimcha sinovga muhtoj).

Ushbu takomillashtirilgan simli usulga kirishning ikki yo'li mavjud. To'g'ridan-to'g'ri yo'l - bu QStringBuilder-ni istagan joyingizga qo'shish va satrlarni birlashtirishda '+' o'rniga '%' operatoridan foydalanish:

Bu eng qulay, ammo to'liq manbaga mos kelmaydigan global yondashuv .pro faylida quyidagicha belgilanadi:

va '+' avtomatik ravishda hamma joyda QStringBuilder '%' sifatida bajariladi.

Maksimal hajm va xotiradan tashqaridagi holatlar

QStringning joriy versiyasi hajmi atigi 2 Gb (2 ^ 31 bayt) dan kam bo'lganligi bilan cheklangan. To'liq qiymat arxitekturaga bog'liq, chunki u ma'lumotlar blokini boshqarish uchun zarur bo'lgan qo'shimcha xarajatlarga bog'liq, ammo 32 baytdan oshmaydi. Xom ma'lumotlar bloklari, shuningdek, joriy versiyada 2 gigabayt minus 1 baytgacha int turini ishlatish bilan cheklangan. QString har bir belgi uchun ikki baytdan foydalanganligi sababli, bitta QStringda 2 ^ 30 ta belgidan pastroqqa aylanadi.

Agar xotira ajratilmasa, QString std :: bad_alloc istisnosini tashlaydi. Qt konteynerlaridagi xotira sharoitlaridan tashqari, Qt istisnolarni keltirib chiqaradigan yagona holat.

Shuni esda tutingki, operatsion tizim juda ko'p ajratilgan xotirani, ayniqsa katta, tutashgan bloklarni saqlaydigan dasturlarga cheklovlar qo'yishi mumkin. Bunday mulohazalar, bunday xatti-harakatlarning konfiguratsiyasi yoki har qanday yumshatish Qt API doirasidan tashqarida.