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

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

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

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с настройки QTreeWidget. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QFile ΠΈ DomParser. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ конструктора DomParser осущСствляСтся синтаксичСский Π°Π½Π°Π»ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ пополняСтся Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π΄Π΅Ρ€Π΅Π²Π°.

Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, для сборки прилоТСния с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ QtXml Π² Ρ„Π°ΠΉΠ» .pro Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

QT += xml

Как ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ DOM ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно нСпростым Π΄Π΅Π»ΠΎΠΌ. ΠŸΡ€ΠΎΡΡ‚Π°Ρ опСрация ΠΏΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ тСкста ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π³Π°ΠΌΠΈ <page> ΠΈ </page> Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ элСмСнтов списка ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ firstChild() ΠΈ nextSibling() класса QDomNode. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΡ‡Π΅Π½ΡŒ часто приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс DOM, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ свои собствСнныС высокоуровнСвыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈβ€”ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для упрощСния выполнСния Ρ‚Π°ΠΊΠΈΡ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ тСкста ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ Ρ‚Π΅Π³Π°ΠΌΠΈ.

Π—Π°ΠΏΠΈΡΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² XML

БущСствуСт Π΄Π²Π° основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ² XML Π² прилоТСниях Qt:

β€’ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ DOM ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ save();

β€’ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» XML Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ этими ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ часто Π½Π΅ зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ интСрфСйса для чтСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² XML: SAX ΠΈΠ»ΠΈ DOM.

НиТС приводится Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ способ создания Π΄Π΅Ρ€Π΅Π²Π° DOM ΠΈ Π΅Π³ΠΎ записи ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ QTextStream:

const int Indent = 4;


QDomDocument doc;

QDomElement root = doc.createElement("doc");

QDomElement quote = doc.createElement("quote");

QDomElement translation = doc.createElement("translation");

QDomText latin = doc.createTextNode("Ars longa vita brevis");

QDomText english = doc.createTextNode("Art is long, life is short");


doc.appendChild(root);

root.appendChild(quote);

root.appendChild(translation);

quote.appendChild(latin);

translation.appendChild(english);


QTextStream out(&file);

doc.save(out, Indent);

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ save() Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ отступа. ΠŸΡ€ΠΈ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΌ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ сформированного Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅. НиТС приводится ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ„Π°ΠΉΠ» XML:

<doc>

....<quote>Ars longa vita brevis</quote>

....<translation>Art is long, life is short</translation>

</doc>

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

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ функция QDomDocument::save() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF-8. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ XMLβ€”ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ

<?xml version="1.0" encoding="ISO-8859-1"?>

Π² Π½Π°Ρ‡Π°Π»ΠΎ Π΄Π΅Ρ€Π΅Π²Π° DOM. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ:

QTextStream out(&file);

QDomNode xmlNode = doc.createProcessingInstruction("xml",

"version=\"1.0\" encoding=\"ISO-8859-1\"");

doc.insertBefore(xmlNode, doc.firstChild());

doc.save(out, Indent);

Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² XML Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ выполняСтся Π½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ DOM. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ QTextStream ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ строки, ΠΊΠ°ΠΊ ΠΌΡ‹ Π±Ρ‹ Π΄Π΅Π»Π°Π»ΠΈ с Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ тСкстовым Ρ„Π°ΠΉΠ»ΠΎΠΌ. НаиболСС слоТным являСтся вставка ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов Π² тСкст ΠΈ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Ѐункция Qt::escape() замСняСт символы '<', '>' ΠΈ '&'. НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Π΅ использования:

QTextStream out(&file);

out.setCodec("UTF-8");

out << "<doc>\n"

<< " <quote>" << Qt::escape(quoteText) << "</quote>\n"

<< " <translation>" << Qt::escape(translationText) << "</translation>\n"

<< "</doc>\n";

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Generating XMLΒ» (Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² XML) Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Β«Qt QuarterlyΒ», доступной Π² сСти Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎ адрСсу http://doc.trolltech.com/qq/qq05-generating-xml.html, рассматриваСтся ΠΎΡ‡Π΅Π½ΡŒ простой класс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π»Π΅Π³ΠΊΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ XML. Π­Ρ‚ΠΎΡ‚ класс Ρ€Π΅ΡˆΠ°Π΅Ρ‚ вопросы, связанныС со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами, отступами ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, позволяя Π½Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ XML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ собираСмся Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Он ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Qt 3, Π½ΠΎ Π΅Π³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ пСрСнСсти Π½Π° Qt 4.

Π“Π»Π°Π²Π° 16. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠΎΠΌΠΎΡ‰ΠΈ

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ своим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ систСму ΠΏΠΎΠΌΠΎΡ‰ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях эта ΠΏΠΎΠΌΠΎΡ‰ΡŒ носит Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… сообщСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… подсказок, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² строкС состояния ΠΈ справок Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β». ВсС это, СстСствСнно, поддСрТиваСтся Π² Qt. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях систСма ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТнСС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ страниц тСкста. Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° систСм Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ классом QTextBrowser Π² качСствС простого Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° систСмы ΠΏΠΎΠΌΠΎΡ‰ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· вашСго прилоТСния Qt Assistant ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ² HTML.

Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² строкС состояния ΠΈ справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β»

Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π°Ρ подсказка (tooltip) прСдставляСт собой нСбольшоС тСкстовоС сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ появляСтся ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ курсора ΠΌΡ‹ΡˆΠΊΠΈ Π½Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΠΆΠ΅Π»Ρ‚ΠΎΠΌ Ρ„ΠΎΠ½Π΅ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ. Π’ основном ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для пояснСния назначСния ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QWidget::setToolTip(). НапримСр:

findButton->setToolTip(tr("Find next"));

Для установки Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказки для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QAction, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ мСню ΠΈΠ»ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setToolTip() для этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. НапримСр:

newAction = new QAction(tr("&New"), this);

newAction->setToolTip(tr("New document"));

Если ΠΌΡ‹ явно Π½Π΅ устанавливаСм Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ подсказку, QAction автоматичСски сформируСт Π΅Π΅ Π½Π° основС тСкста ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² строкС состояния (status tip) Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ тСкстовыС сообщСния, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… подсказок. ΠŸΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ курсора ΠΌΡ‹ΡˆΠΊΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов ΠΈΠ»ΠΈ Π½Π° строкС мСню Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ появляСтся Π² строкС состояния. Для добавлСния ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΠ»ΠΈ ΠΊ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π² строкС состояния коммСнтария Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setStatusTip():

newAction->setStatusTip(tr("Create a new document"));

Рис. 16.1. Π’ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π°Ρ подсказка ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π² строкС состояния.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅, Ρ‡Π΅ΠΌ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… подсказок ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² строкС состояния. НапримСр, Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² обСспСчСнии слоТного Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° с ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ тСкстом для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля Π±Π΅Π· принуТдСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° систСмы ΠΏΠΎΠΌΠΎΡ‰ΠΈ. Π Π΅ΠΆΠΈΠΌ Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β» идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этого. Когда ΠΎΠΊΠ½ΠΎ находится Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β», курсор ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ Β«?Β» ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для получСния тСкста ΠΏΠΎΠΌΠΎΡ‰ΠΈ. Для Π²Ρ…ΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌ Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«?Β» Π² строкС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (Π² систСмС Windows ΠΈ KDE), Π»ΠΈΠ±ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ сочСтаниС клавиш Shift+F1.

НиТС приводится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ установки для Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° тСкста справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β»:

dialog->setWhatsThis(tr("<img src=\":/images/icon.png\">"

"&nbsp;The meaning of the Source field depends "

"on the Type field:"

"<ul>"

"<li><b>Books</b> have a Publisher"

"<li><b>Articles</b> have a Journal name with "

"volume and issue number"

"<li><b>Theses</b> have an Institution name "

"and a Department name"

"</ul>"));

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π΅Π³ΠΈ HTML для форматирования тСкста справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β». Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ рСсурсов прилоТСния), ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список ΠΈ ΠΆΠΈΡ€Π½Ρ‹ΠΉ тСкст Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… мСстах. Π’Π΅Π³ΠΈ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Qt, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π° Π²Π΅Π±-страницС http://doc.trolltech.com/4.1/richtext-html-subset.html.

Рис. 16.2. Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ тСкста справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β»

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ тСкст справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β» для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

openAct->setWhatsThis(tr("<img src=open.png>&nbsp;"

"Click this option to open an existing file."));

ΠŸΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ тСкста справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β» ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β» Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΡƒΠ½ΠΊΡ‚ мСню, Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ быстрого Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Когда ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β», ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² мСню Help (справка) содСрТится ΠΏΡƒΠ½ΠΊΡ‚ What's This? (Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?) ΠΈ панСль инструмСнтов содСрТит ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ создания ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ What's This? ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ статичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QWhatsThis::createAction() ΠΈ добавлСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ Сю ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² мСню Help ΠΈ Π² панСль инструмСнтов. Класс QWhatsThis прСдоставляСт Ρ‚Π°ΠΊΠΆΠ΅ статичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° справки Β«Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?Β».