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

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

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

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ расчСт с Β«ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ шага», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ максимального значСния шага. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ число Π²ΠΈΠ΄Π° 10n, мСньшСС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎΠ΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΡƒ ΡˆΠ°Π³Ρƒ. ΠœΡ‹ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ взятия дСсятичного Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΠ° ΠΎΡ‚ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ шага, Π·Π°Ρ‚Π΅ΠΌ округляСм ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа, послС Ρ‡Π΅Π³ΠΎ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΠΌ 10 Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ этому ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. НапримСр, Ссли ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ шаг Ρ€Π°Π²Π΅Π½ 236, ΠΌΡ‹ вычисляСм log 236 = 2.37291…; Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ округляСм это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ 2 ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 102 = 100 Π² качСствС ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π° Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΡˆΠ°Π³Π° Π² Ρ„ΠΎΡ€ΠΌΠ΅ числа 10n.

ПослС получСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π° Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ шага ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для расчСта Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ²: 2 β€’ 10n ΠΈ 5 β€’ 10n. Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ числами 200 ΠΈ 500. ΠšΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ 500 ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большСС, Ρ‡Π΅ΠΌ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ шаг, ΠΈ поэтому ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Но 200 мСньшС, Ρ‡Π΅ΠΌ 236, ΠΈ поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 200 Π² качСствС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° шага Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Достаточно Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ numTicks, min ΠΈ max ΠΈΠ· значСния шага. НовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ min получаСтся ΠΏΡƒΡ‚Π΅ΠΌ округлСния снизу ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ min Π΄ΠΎ блиТайшСго числа, ΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ этому ΡˆΠ°Π³Ρƒ, Π° Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ max получаСтся ΠΏΡƒΡ‚Π΅ΠΌ округлСния свСрху Π΄ΠΎ блиТайшСго числа, ΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ этому ΡˆΠ°Π³Ρƒ. НовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ numTicks прСдставляСт собой количСство ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями min ΠΈ max. НапримСр, Ссли ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ min Ρ€Π°Π²Π½ΠΎ 240, Π° max Ρ€Π°Π²Π½ΠΎ 1184, Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ [200, 1200] с ΠΏΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ.

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π΄Π°Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π‘ΠΎΠ»Π΅Π΅ ΠΈΠ·ΠΎΡ‰Ρ€Π΅Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ описан Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Поля Π‘. Π₯Π΅ΠΊΠ±Π΅Ρ€Ρ‚Π° (Paul S. Heckbert) Β«Nice Numbers for Graph LabelsΒ» (ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ числа для ΠΌΠ΅Ρ‚ΠΎΠΊ Π³Ρ€Π°Ρ„Π°), ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² Graphics Gems (ISBN 0β€”12β€”286166β€”3).

Данная Π³Π»Π°Π²Π° являСтся послСднСй Π² части I. Π’ Π½Π΅ΠΉ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Ρ‹ способы настройки ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Qt ΠΈ способы построСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° с использованиСм Π² качСствС основы Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² QWidget. Π’ Π³Π»Π°Π²Π΅ 2 ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΈ ΠΌΡ‹ Π΅Ρ‰Π΅ вСрнСмся ΠΊ этой Ρ‚Π΅ΠΌΠ΅ Π² Π³Π»Π°Π²Π΅ 6.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρƒ нас достаточно Π·Π½Π°Π½ΠΈΠΉ для написания Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Qt. Π’ частях II ΠΈ III ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ исслСдованиС Qt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности Qt.

Π§Π°ΡΡ‚ΡŒ II. Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Qt—программирования

Π“Π»Π°Π²Π° 6. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. Qt содСрТит нСсколько классов, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅: QHBoxLayout, QVBoxLayout, QGridLayout ΠΈ QStackLayout. Π­Ρ‚ΠΈ классы Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ просто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Qtβ€”Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ нСпосрСдствСнно Π² исходном ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· Qt Designer.

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

К Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ, относятся QSplitter, QScrollArea, QMainWindow ΠΈ QWorkspace. ΠžΠ±Ρ‰Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° этих классов β€” обСспСчСниС Π³ΠΈΠ±ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. НапримСр, QSplitter обСспСчиваСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², a QWorkspace обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ MDI (multiple document interface β€” ΠΌΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ интСрфСйс), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ прилоТСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ сразу нСсколько Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти классы часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° основным классам ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅.

Компоновка Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅

БущСствуСт Ρ‚Ρ€ΠΈ основных способа управлСния ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹: Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ручная ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠœΡ‹ рассмотрим ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² качСствС нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Find File (Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ»), ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° рис. 6.1.

Рис. 6.1. Окно диалога Find File.

ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ являСтся самым Π½Π΅Π³ΠΈΠ±ΠΊΠΈΠΌ способом ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Он прСдусматриваСт ТСсткоС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ самой Ρ„ΠΎΡ€ΠΌΡ‹. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ конструктор FindFileDialog ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ позиционирования:

01 FindFileDialog::FindFileDialog(QWidget *parent)

02 : QDialog(parent)

03 {

04 namedLabel->setGeometry(9, 9, 50, 25);

05 namedLineEdit->setGeometry(65, 9, 200, 25);

06 lookInLabel->setGeometry(9, 40, 50, 25);

07 lookInLineEdit->setGeometry(65, 40, 200, 25);

08 subfoldersCheckBox->setGeometry(9, 71, 256, 23);

09 tableWidget->setGeometry(9, 100, 256, 100);

10 messageLabel->setGeometry(9, 206, 256, 25);

11 findButton->setGeometry(271, 9, 85, 32);

12 stopButton->setGeometry(271, 47, 85, 32);

13 closeButton->setGeometry(271, 84, 85, 32);

14 helpButton->setGeometry(271, 199, 85, 32);

15 setWindowTitle(tr("Find Files or Folders"));

16 setFixedSize(365, 240);

17 }

ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ нСдостатков:

β€’ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°;

β€’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ тСкст ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ отсСчСнным, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ большой ΡˆΡ€ΠΈΡ„Ρ‚ ΠΈΠ»ΠΈ Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ пСрСводится Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык;

β€’ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стилСй;

β€’ расчСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π­Ρ‚ΠΎΡ‚ процСсс ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»Π΅Π½ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, это сильно затрудняСт сопровоТдСниС.

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

01 FindFileDialog::FindFileDialog(QWidget *parent)

02 : QDialog(parent)

03 {

04 SetMinimumSize(265, 190);

05 resize(365, 240);

06 }


07 void FindFileDialog::resizeEvent(QResizeEvent * /* event */)

08 {

09 int extraWidth = width() - minimumWidth();

10 int extraHeight = height() - minimumHeight();

11 namedLabel->setGeometry(9, 9, 50, 25);

12 namedLineEdit->setGeometry(65, 9, 100 + extraWidth, 25);

13 lookInLabel->setGeometry(9, 40, 50, 25);

14 lookInLineEdit->setGeometry(65, 40, 100 + extraWidth, 25);

15 subfoldersCheckBox->setGeometry(9, 71, 156 + extraWidth, 23);

16 tableWidget->setGeometry(9, 100, 156 + extraWidth, 50 + extraHeight);

17 messageLabel->setGeometry(9, 156 + extraHeight, 156 + extraWidth, 25);

18 findButton->setGeometry(171 + extraWidth, 9, 85, 32);

19 stopButton->setGeometry(171 + extraWidth, 47, 85, 32);

20 closeButton->setGeometry(171 + extraWidth, 84, 85, 32);

21 helpButton->setGeometry(171 + extraWidth, 149 + extraHeight, 85, 32);

22 }

ΠœΡ‹ устанавливаСм Π² конструкторС FindFileDialog ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 265 Γ— 190 ΠΈ Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 365 Γ— 240. Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ событий resizeEvent() ΠΌΡ‹ ΠΎΡ‚Π΄Π°Π΅ΠΌ всС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ обСспСчиваСт ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².

Рис. 6.2. ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ своих Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ приходится ТСстко Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ констант, рассчитываСмых программистом. НаписаниС ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставляСт собой Π½ΡƒΠ΄Π½ΠΎΠ΅ занятиС, особСнно Ссли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ измСняСтся. И всС-Ρ‚Π°ΠΊΠΈ сущСствуСт риск отсСчСния тСкста. Π­Ρ‚ΠΎΠ³ΠΎ риска ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, принимая Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Π½ΠΎ это Π΅Ρ‰Π΅ большС услоТняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π‘Π°ΠΌΡ‹ΠΉ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ β€” использованиС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Qt. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ осмыслСнныС, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ зависит ΠΎΡ‚ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, Π΅Π³ΠΎ стиля ΠΈ содСрТимого. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ автоматичСски ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° измСнСния ΡˆΡ€ΠΈΡ„Ρ‚Π°, измСнСния содСрТимого ΠΈ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°.