Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 68

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

_ _ _Π’ΠžΠ’_\t_THE_ _\nDOG_\n

Π‘Ρ‚Ρ€ΠΎΠΊΠ°, возвращаСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ trimmed(), ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

Π’ΠžΠ’_\t_THE_ _\nDOG

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΌ часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ удалСния ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов с ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†ΠΎΠ² строки, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… символов ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ. ИмСнно это выполняСт функция simplified():

QString str = " Π’ΠžΠ’ \t THE \nDOG \n";

qDebug() << str.simplified();

Π‘Ρ‚Ρ€ΠΎΠΊΠ°, возвращаСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ simplified(), ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

Π’ΠžΠ’_THE_DOG

Π‘Ρ‚Ρ€ΠΎΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° подстроки Ρ‚ΠΈΠΏΠ° QStringList ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QList::split():

QString str = "polluter pays principle";

QStringList words = str.split(" ");

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ строку Β«polluter pays principleΒ» Π½Π° Ρ‚Ρ€ΠΈ подстроки: Β«polluterΒ», Β«paysΒ» ΠΈ Β«principleΒ». Ѐункция split() ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Π½Π°Π΄ΠΎ Π»ΠΈ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ пустыС подстроки (Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ списка QStringList ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½Ρƒ строку ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ join(). ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ join() Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ вставляСтся ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡ‹Ρ… строк. НапримСр, Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ строку ΠΈΠ· всСх строк списка QStringList, располоТСнных Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… символом ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку:

words.sort();

str = words.join("\n");

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ строк Π½Π°ΠΌ часто приходится ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, пустая строка ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ isEmpty() ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ равСнства Π½ΡƒΠ»ΡŽ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ length() значСния.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строк const char * Π² QString Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв выполняСтся автоматичСски, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

str += " (1870)";

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ добавляСм строку const char * Π² ΠΊΠΎΠ½Π΅Ρ† строки QString Π±Π΅Π· выполнСния явного прСобразования. Для явного прСобразования const char * Π² QString Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π² QString ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fromAscii() ΠΈΠ»ΠΈ fromLatin1(). (Π Π°Π±ΠΎΡ‚Π° с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ строками Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… рассматриваСтся Π² Π³Π»Π°Π²Π΅ 17.)

Для прСобразования QString Π² const char * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ toAscii() ΠΈΠ»ΠΈ toLatin1(). Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ QByteArray, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² const char *, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ QByteArray::data() ΠΈΠ»ΠΈ QByteArray::constData(). НапримСр:

printf("User: %s\n", str.toAscii().data());

Для удобства Π² Qt прСдусмотрСн макрос qPrintable(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эквивалСнтСн ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ toAscii().constData():

printf("User: %s\n", qPrintable(str));

Когда ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ data() ΠΈΠ»ΠΈ constData() для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° QByteArray, Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ строки Π±ΡƒΠ΄Π΅Ρ‚ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΡƒΡ‚Π΅Ρ‡ΠΊΠ°Ρ… памяти β€” Qt Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ слишком Π΄ΠΎΠ»Π³ΠΎ. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QByteArray Π½Π΅ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ΄Π°Π»Π΅Π½ Π² ΠΊΠΎΠ½Ρ†Π΅ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс класса QByteArray ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс класса QString. Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ left(), right(), mid(), toLower(), toUpper(), trimmed() ΠΈ simplified(), ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² QByteArray ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ сСмантику, ΠΊΠ°ΠΊ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² QString. QByteArray ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для хранСния Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ строк с 8-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ тСкста. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QString для хранСния тСкста, Π° Π½Π΅ QByteArray, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ QString ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Unicode.

Для удобства QByteArray всСгда автоматичСски обСспСчиваСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ символа '\0' послС послСднСго Π±Π°ΠΉΡ‚Π°, облСгчая ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QByteArray Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ const char *. QByteArray Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя символы '\0', Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ‚ΠΈΠΏ для хранСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях трСбуСтся Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² прСдставлСнии этих Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ QByteArray ΠΈΠ»ΠΈ QString. НапримСр, Π² Π²ΠΈΠ΄Π΅ строки ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ тСкстовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Π½ΠΎ Π»ΠΈΡˆΠ°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСимущСств Π‘++, Π² частности связанных с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ высокой ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ. Qt обСспСчиваСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°: QVariant.

Класс QVariant ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Qt, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ QBrush, QColor, QCursor, QDateTime, QFont, QKeySequence, QPalette, QPen, QPixmap, QPoint, QRect, QRegion, QSize ΠΈ QString, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ основныС числовыС Ρ‚ΠΈΠΏΡ‹ Π‘++, ΠΊΠ°ΠΊ double ΠΈ int. Класс QVariant ΠΌΠΎΠΆΠ΅Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ QMap<QString, QVariant>, QStringList ΠΈ QList<QVariant>.

Π¨ΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого Ρ‚ΠΈΠΏΠ° Π² классах отобраТСния элСмСнтов, Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² классС QSettings, позволяя ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ элСмСнтов, Π΄Π°Π½Π½Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ настройки Π² Π²ΠΈΠ΄Π΅ любого значСния, допускаСмого Ρ‚ΠΈΠΏΠΎΠΌ QVariant. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ этого ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 3, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QRect, QStringList ΠΈ ΠΏΠ°Ρ€Π° Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QSettings::setValue() ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QVariant.

МоТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ слоТныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏ QVariant для обСспСчСния Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:

QMap<QString, QVariant> pearMap;

pearMap["Standard"] = 1.95;

pearMap["Organic"] = 2.25;

QMap<QString, QVariant> fruitMap;

fruitMap["Orange"] = 2.10;

fruitMap["Pineapple"] = 3.85;

fruitMap["Pear"] = pearMap;

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создали ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ со строковыми ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ (названия ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ) ΠΈ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (Ρ†Π΅Π½Ρ‹), Π»ΠΈΠ±ΠΎ отобраТСния. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня содСрТит Ρ‚Ρ€ΠΈ ΠΊΠ»ΡŽΡ‡Π°: Β«OrangeΒ», Β«PearΒ» ΠΈ Β«PineappleΒ» (апСльсин, Π³Ρ€ΡƒΡˆΠ° ΠΈ ананас). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, связанноС с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Β«Π Π΅Π°Π³Β», являСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, содСрТащим Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° Β«StandardΒ» ΠΈ Β«OrganicΒ» (стандартный ΠΈ экологичСски чистый). ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΏΠΎ ассоциативному массиву, содСрТащСму ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QVariant, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ type() для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ находящСгося Π² QVariant Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Бпособ создания ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Но удобство примСнСния Ρ‚ΠΈΠΏΠ° QVariant достигаСтся Π·Π° счСт сниТСния эффСктивности ΠΈ читаСмости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для хранСния Π½Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс языка Π‘++ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

QVariant ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚Π°-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ систСмой Qt ΠΈ поэтому являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ модуля QtCore. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ собираСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ QtGui, QVariant ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, связанныС с графичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом, ΠΊΠ°ΠΊ QColor, QFont, QIcon, QImage ΠΈΠ»ΠΈ QPixmap:

QIcon icon("open.png");

QVariant variant = icon;

Для извлСчСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ этих Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ· QVariant ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽβ€”Ρ‡Π»Π΅Π½ QVariant::value<T>():

QIcon icon = variant.value<QIcon>();

Ѐункция value<T>() Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ нСграфичСского интСрфСйса ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ QVariant, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования Π²ΠΈΠ΄Π° to…() (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, toString()) для прСобразования Ρ‚ΠΈΠΏΠΎΠ² нСграфичСского интСрфСйса.

QVariant ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для хранСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ условии обСспСчСния ΠΈΠΌΠΈ стандартного конструктора ΠΈ конструктора копирования. Π§Ρ‚ΠΎΠ±Ρ‹ это Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ макрос Q_DECLARE_METATYPE() ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ послС опрСдСлСния класса:

Q_DECLARE_METATYPE(BusinessCard)

Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄:

BusinessCard businessCard;

QVariant variant = QVariant::fromValue(businessCard);

if (variant.canConvert<BusinessCard>()) {

BusinessCard card = variant.value<BusinessCard>();

}

Π­Ρ‚ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈβ€”Ρ‡Π»Π΅Π½Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с компилятором MSVC 6 ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ послСднСго. Если Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ этого компилятора, вмСсто ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ qVariantFromValue(), qVariantValue<T>() ΠΈ qVariantCanConvert<T>().

Если Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… прСдусмотрСны ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ << ΠΈ >> для записи ΠΈ чтСния ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… QDataStream, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ qRegisterMetaTypeStreamOperators<T>(). Π­Ρ‚ΠΎ позволяСт, срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настройки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ QSettings. НапримСр: