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

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

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

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ QTextBrowser ΠΈΠ»ΠΈ Qt Assistant ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ зависящиС ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ обСспСчСния ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠΎΠΌΠΎΡ‰ΠΈ. Для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ систСмы ΠΏΠΎΠΌΠΎΡ‰ΠΈ Windows HTML Help ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½ΠΈΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Internet Explorer ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft. Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для этого класс Qt QProcess ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ срСду ActiveQt. Для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ X11 подходящий ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠ³ Π±Ρ‹ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π² создании Ρ„Π°ΠΉΠ»ΠΎΠ² HTML ΠΈ запускС Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, с использованиСм QProcess. Π’ Mac OS X подсистСма Apple Help прСдоставляСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности для Qt Assistant.

На этом ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ Ρ‡Π°ΡΡ‚ΡŒ II. Π’ части III Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΈ спСциализированныС срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Qt. Π˜Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π‘++ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ большС трудностСй, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² части II, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ слоТности Π² Π½ΠΎΠ²Ρ‹Ρ… для вас областях.

Π§Π°ΡΡ‚ΡŒ III. Advanced Qt

Π“Π»Π°Π²Π° 17. Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

ΠšΡ€ΠΎΠΌΠ΅ латинского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для английского ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… СвропСйских языков, Qt 4 обСспСчиваСт ΡˆΠΈΡ€ΠΎΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΈΡ€ΠΎΠ²Ρ‹Ρ… систСм записи:

β€’ Qt примСняСт Unicode Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ интСрфСйсС ΠΈ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… опСрациях. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ всСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ язык примСняСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС;

β€’ тСкстовый процСссор Qt ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСми основными нСлатинскими систСмами записи, Π² Ρ‚ΠΎΠΌ числС с арабской, китайской, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ, ΠΈΠ²Ρ€ΠΈΡ‚ΠΎΠΌ, японской, корСйской, тайской ΠΈ с языками Индии;

β€’ процСссор ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Qt обСспСчиваСт ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ справа Π½Π°Π»Π΅Π²ΠΎ для Ρ‚Π°ΠΊΠΈΡ… языков, ΠΊΠ°ΠΊ арабский ΠΈ ΠΈΠ²Ρ€ΠΈΡ‚;

β€’ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… языков Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π²ΠΎΠ΄Π° тСкста. Π’Π°ΠΊΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ рСдактирования, ΠΊΠ°ΠΊ QLineEdit ΠΈ QTextEdit, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² условиях примСнСния любого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Π²ΠΎΠ΄Π° тСкста, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π² систСмС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° тСкста ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π½Π° ΠΈΡ… Ρ€ΠΎΠ΄Π½ΠΎΠΌ языкС часто оказываСтся нСдостаточным; Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ пСрСвСсти вСсь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс. Π’ Qt это дСлаСтся просто: всС Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ строки ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ tr() (ΠΊΠ°ΠΊ это ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…) ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ Qt для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ язык. Qt ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ с графичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом, которая называСтся Qt Linguist ΠΈ прСдназначаСтся для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΎΠ². Qt Linguist дополняСтся двумя ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ lupdate ΠΈ lrelease, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° загруТаСтся ΠΏΡ€ΠΈ запускС прилоТСния с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ установлСнных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Однако Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΎ врСмя выполнСния прилоТСния. Π­Ρ‚ΠΎ, нСсомнСнно, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Qt, хотя ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. А благодаря систСмС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Qt Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±ΡƒΠ΄ΡƒΡ‚ автоматичСски ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ достаточно мСста для ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ тСкста, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ исходного тСкста.

Π Π°Π±ΠΎΡ‚Π° с Unicode

Unicode являСтся стандартной ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΈΡ€ΠΎΠ²Ρ‹Ρ… систСм записи. Π’ основС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Unicode Π»Π΅ΠΆΠΈΡ‚ идСя использования для хранСния символов 16 Π±ΠΈΡ‚, Π° Π½Π΅ 8, ΠΈ поэтому ΠΎΠ½Π° позволяСт Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 65 000 символов вмСсто Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 256[8]. Unicode содСрТит ΠΊΠΎΠ΄Ρ‹ ASCII ΠΈ ISO 8859-1 (Latin-1) Π² качСствС своСго подмноТСства с ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ ΠΈΡ… прСдставлСниСм. НапримСр, английская Π±ΡƒΠΊΠ²Π° «А» ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x41 Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… ASCII, Latin-1 ΠΈ Unicode, Π° Π±ΡƒΠΊΠ²Π° Β«Π’Β» ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0xD1 Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… Latin-1 ΠΈ Unicode. Класс Qt QString Ρ…Ρ€Π°Π½ΠΈΡ‚ строковыС значСния Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ QString ΠΈΠΌΠ΅Π΅Ρ‚ 16-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ QChar, Π° Π½Π΅ 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ char. НиТС приводятся Π΄Π²Π° способа установки ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа строки Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «А»:

str[0] = 'A';

str[0] = QChar(0x41);

Если исходный Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Latin-1, Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ символы Latin-1 ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ:

str[0] = 'C';

Но Ссли исходный Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ срабатываСт Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с числовым ΠΊΠΎΠ΄ΠΎΠΌ:

str[0] = QChar(0xD1);

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ любой символ Unicode с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΅Π³ΠΎ числового ΠΊΠΎΠ΄Π°. НапримСр, Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ задаСтся прописная Π±ΡƒΠΊΠ²Π° «сигма» грСчСского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° («Σ») ΠΈ символ Π²Π°Π»ΡŽΡ‚Ρ‹ Π΅Π²Ρ€ΠΎ («€»):

str[0] = QChar(0x3A3);

str[0] = QChar(0x20AC);

ВсС числовыС ΠΊΠΎΠ΄Ρ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Unicode, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² сСти Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎ адрСсу http://www.unicode.org/standard/. Если Π²Π°ΠΌ приходится Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символы Unicode, Π½Π΅ относящиСся ΠΊ Latin-1, для поиска ΠΈΡ… ΠΊΠΎΠ΄ΠΎΠ² Π²ΠΏΠΎΠ»Π½Π΅ достаточно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ адрСсом; Π½ΠΎ Qt обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Π²Π²ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Qt строк символов Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ВСкстовый процСссор Π² Qt 4 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ систСмы записи: Π°Ρ€Π°Π±ΡΠΊΡƒΡŽ, ΠΊΠΈΡ‚Π°ΠΉΡΠΊΡƒΡŽ, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ, Π³Ρ€Π΅Ρ‡Π΅ΡΠΊΡƒΡŽ, ΠΈΠ²Ρ€ΠΈΡ‚, ΡΠΏΠΎΠ½ΡΠΊΡƒΡŽ, ΠΊΠΎΡ€Π΅ΠΉΡΠΊΡƒΡŽ, Π»Π°ΠΎΡΡΠΊΡƒΡŽ, Π»Π°Ρ‚ΠΈΠ½ΡΠΊΡƒΡŽ, Ρ‚Π°ΠΉΡΠΊΡƒΡŽ ΠΈ Π²ΡŒΠ΅Ρ‚Π½Π°ΠΌΡΠΊΡƒΡŽ. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС скрипты 4.1 Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² систСмС X11 с Fontconfig ΠΈ Π² послСдних вСрсиях систСмы Windows ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ языки: бСнгальский, Π΄Π΅Π²Π°Π½Π°Π³Π°Ρ€ΠΈ, Π³ΡƒΠΉΠ°Ρ€Π°Ρ‚ΠΈ, Π³ΡƒΡ€ΠΌΡƒΡ…ΠΈ, ΠΊΠ°Π½Π½Π°Π΄Π°, кхмСрский, малайский, сирийский, Ρ‚Π°ΠΌΠΈΠ»ΡŒΡΠΊΠΈΠΉ, Ρ‚Π΅Π»ΡƒΠ³Ρƒ, Ρ‚Ρ…Π°Π°Π½Π° (Π΄ΠΈΠ²Π΅Ρ…ΠΈ) ΠΈ тибСтский. НаконСц, ория поддСрТиваСтся Π² систСмС X11, Π° монгольский ΠΈ синхала ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Windows XP. Если Π² систСмС установлСн ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚, Qt смоТСт воспроизвСсти тСкст Π½Π° любом ΠΈΠ· этих языков. А ΠΏΡ€ΠΈ установкС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Π²ΠΎΠ΄Π° тСкста ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ смогут Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² своих прилоТСниях Qt тСкст Π½Π° этих языках.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с использованиСм QChar Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ программирования с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ char. Для получСния числового ΠΊΠΎΠ΄Π° символа QChar Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ для Π½Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ unicode(). Для получСния ΠΊΠΎΠ΄Π° ASCII ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° QChar (Π² Π²ΠΈΠ΄Π΅ char) Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ toLatin1(). Для символов, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Latin-1, функция toLatin1() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ '\0'.

Если Π½Π°ΠΌ Π·Π°Ρ€Π°Π½Π΅Π΅ извСстно, Ρ‡Ρ‚ΠΎ всС строковыС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ прСдставлСны Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII ΠΈΠ»ΠΈ Latin-1, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ <cctype>), ΠΊΠ°ΠΊ isalpha(), isdigit() ΠΈ isspace(), для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ toLatin1() значСния. Однако Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈβ€”Ρ‡Π»Π΅Π½Ρ‹ класса QChar для выполнСния этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для Π»ΡŽΠ±Ρ‹Ρ… символов Unicode. К Ρ‚Π°ΠΊΠΈΠΌ функциям класса QChar относятся isPrint(), isPunct(), isSpace(), isMark(), isLetter(), isNumber(), isLetterOrNumber(), isDigit(), isSymbol(), isLower() ΠΈ isUpper(). НапримСр, Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ символа Π½Π° Ρ†ΠΈΡ„Ρ€Ρƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΠ½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ:

if (ch.isDigit() || ch.isUpper())

…

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Π»ΡŽΠ±Ρ‹Ρ… Π°Π»Ρ„Π°Π²ΠΈΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ символы Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистров, Π² Ρ‚ΠΎΠΌ числС для латинского, грСчСского ΠΈ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹.

Π‘Ρ‚Ρ€ΠΎΠΊΡƒ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса Qt, Π³Π΄Π΅ допускаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ строки Ρ‚ΠΈΠΏΠ° QString. Qt сам ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π΅Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² соотвСтствущиС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈ взаимодСйствии с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

ОсобСнно Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°Π΄ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈ записи тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ². ВСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΈ часто оказываСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ тСкстового Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ QTextStream ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ 8-Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ (которая доступна ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QTextCodec::codecForLocale()), ΠΊΠ°ΠΊ для чтСния, Ρ‚Π°ΠΊ ΠΈ для записи. Для стран АмСрики ΠΈ Π—Π°ΠΏΠ°Π΄Π½ΠΎΠΉ Π•Π²Ρ€ΠΎΠΏΡ‹ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Latin-1.

Если ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ свой собствСнный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ собираСмся ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ символы Unicode, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π°

stream.setCodec("UTF-16");

stream.setGenerateByteOrderMark(true);

Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° записи Π² ΠΏΠΎΡ‚ΠΎΠΊ QTextStream. Π”Π°Π½Π½Ρ‹Π΅ Π² этом случаС Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UTF-16, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° для прСдставлСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прСфикс ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ 16-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ значСния (ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ порядка Π±Π°ΠΉΡ‚ΠΎΠ² Unicode, 0xFFFE), ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Unicode ΠΈ Π½Π° прямой ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ порядок Π±Π°ΠΉΡ‚ΠΎΠ². Π€ΠΎΡ€ΠΌΠ°Ρ‚ UTF-16 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ Π² памяти строк QString, ΠΈ поэтому Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись прСдставлСнных Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode строк Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UTF-16 ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ быстро. Однако Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ связан с пСрСрасходом памяти ΠΏΡ€ΠΈ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ…, прСдставлСнных Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ ASCII, Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UTF-16, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π·Π°ΠΉΠΌΠ΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ.