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

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

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

Рис. 2.5. Qt Designer Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ пристыкованного ΠΎΠΊΠ½Π° Π² систСмС Windows.

Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡŒΡ‚Π΅ Π½ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ Π²Π²Π΅Ρ€Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° стала ΠΊΠΎΡ€ΠΎΡ‡Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ, ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π½Π° рис. 2.6. НС Ρ‚Ρ€Π°Ρ‚ΡŒΡ‚Π΅ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ элСмСнтов Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅; ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Qt ΠΏΠΎΠ·ΠΆΠ΅ выполнят Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Рис. 2.6. Π€ΠΎΡ€ΠΌΠ° с нСсколькими Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ.

Π—Π°Π΄Π°ΠΉΡ‚Π΅ свойства ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ свойств Qt Designer.

1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ тСкстовой ΠΌΠ΅Ρ‚ΠΊΠ΅. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ свойство objectName (имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«labelΒ» (тСкстовая ΠΌΠ΅Ρ‚ΠΊΠ°), Π° свойство text (тСкст) установитС Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«&Cell LocationΒ» (располоТСниС ячСйки).

2. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ строкС рСдактирования. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ свойство objectName ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«lineEditΒ» (строка рСдактирования).

3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅. УстановитС свойство objectName Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«okButtonΒ» (ΠΊΠ½ΠΎΠΏΠΊΠ° подтвСрТдСния), свойство enabled (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°) Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«falseΒ» (лоТь), свойство default (Ρ€Π΅ΠΆΠΈΠΌ умолчания) Π½Π° Β«trueΒ» (истина), свойство text Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«OKΒ» (ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ).

4. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅. УстановитС свойство objectName Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«cancelButtonΒ» (ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡ‚ΠΌΠ΅Π½Ρ‹) ΠΈ свойство text Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«CancelΒ» (ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ).

5. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ свободному мСсту Ρ„ΠΎΡ€ΠΌΡ‹ для Π²Ρ‹Π±ΠΎΡ€Π° самой Ρ„ΠΎΡ€ΠΌΡ‹. УстановитС objectName Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«GoToCellDialogΒ» (Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ячСйку) ΠΈ windowTitle (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°) Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«Go to CellΒ» (ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ячСйку).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ выглядят ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ тСкстовой ΠΌΠ΅Ρ‚ΠΊΠΈ &Cell Location. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Edit | Edit Buddies (ΠŸΡ€Π°Π²ΠΊΠ° | Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠ²) для Π²Ρ…ΠΎΠ΄Π° Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠ². Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ этой ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΈ пСрСнСситС ΠΊΡ€Π°ΡΠ½ΡƒΡŽ стрСлку Π½Π° строку рСдактирования, Π° Π·Π°Ρ‚Π΅ΠΌ отпуститС ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΊΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ эта ΠΌΠ΅Ρ‚ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Cell Location ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ строку рСдактирования Π² качСствС ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π°. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Click Edit | Edit Widgets (ΠŸΡ€Π°Π²ΠΊΠ° | Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹) для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° установки ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠ².

Рис. 2.7. Π’ΠΈΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹ послС установки свойств Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ².

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ этапС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ тСкстовой ΠΌΠ΅Ρ‚ΠΊΠ΅ Cell Location ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Shift ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ со Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΏΠΎ полю рСдактирования, обСспСчив ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ этих Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Form | Lay Out Horizontally (Π€ΠΎΡ€ΠΌΠ° | Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°).

2. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ растяТкС, Π·Π°Ρ‚Π΅ΠΌ, удСрТивая ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Shift, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ клавишам OK ΠΈ Cancel. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Form | Lay Out Horizontally.

3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ свободному мСсту Ρ„ΠΎΡ€ΠΌΡ‹, аннулируя Π²Ρ‹Π±ΠΎΡ€ Π»ΡŽΠ±Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Form | Lay Out Vertically (Π€ΠΎΡ€ΠΌΠ° | Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°).

4. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Form | Adjust Size для установки ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„ΠΎΡ€ΠΌΡ‹.

ΠšΡ€Π°ΡΠ½Ρ‹ΠΌΠΈ линиями Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ созданныС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Они Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рис. 2.8. Π€ΠΎΡ€ΠΌΠ° с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Edit | Edit Tab Order (ΠŸΡ€Π°Π²ΠΊΠ° | Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ порядок ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΠΎ клавишС табуляции). Рядом с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ фокус, появятся синиС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ, соблюдая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° фокуса, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Edit | Edit Widgets для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ клавишС табуляции.

Рис. 2.9. Установка ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° фокуса ΠΏΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ Ρ„ΠΎΡ€ΠΌΡ‹.

Для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ просмотра спроСктированного Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Form | Preview (Π€ΠΎΡ€ΠΌΠ° | ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° фокуса, наТимая нСсколько Ρ€Π°Π· ΠΊΠ»Π°Π²ΠΈΡˆΡƒ табуляции. НаТмитС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ клавиши Alt+C для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° фокуса Π½Π° строку рСдактирования. НаТмитС Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Cancel для прСкращСния Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ спроСктированноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ gotocelldialog.ui Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ gotocell ΠΈ создайтС Ρ„Π°ΠΉΠ» main.cpp Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

01 #include <QApplication>

02 #include <QDialog>

03 #include "ui_gotocelldialog.h"


04 int main(int argc, char *argv[])

05 {

06 QApplication app(argc, argv);

07 Ui::GoToCellDialog ui;

08 QDialog *dialog = new QDialog;

09 ui.setupUi(dialog);

10 dialog->show();

11 return app.exec();

12 }

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ qmake для создания Ρ„Π°ΠΉΠ»Π° с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .pro ΠΈ Π·Π°Ρ‚Π΅ΠΌ создайтС Ρ„Π°ΠΉΠ» makefile (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ qmake β€”project; qmake gotocell.pro). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ qmake Β«Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΡƒΠΌΠ°Β» ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса gotocelldialog.ui ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для Π²Ρ‹Π·ΠΎΠ²Π° uic β€” компилятора ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, входящСго Π² состав срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Qt. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ uic ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ gotocelldialog.ui Π² инструкции Π‘++ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ui_gotocelldialog.h.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ui_gotocelldialog.h содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Ui::GoToCellDialog, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит инструкции Π‘++, эквивалСнтныС Ρ„Π°ΠΉΠ»Ρƒ gotocelldialog.ui. Π’ этом классС ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅β€”Ρ‡Π»Π΅Π½Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТатся Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ функция setupUi(), которая ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

class Ui::GoToCellDialog

{

public:

QLabel *label;

QLineEdit *lineEdit;

QSpacerItem *spacerItem;

QPushButton *okButton;

QPushButton *cancelButton;

…

void setupUi(QWidget *widget) {

…

}

};

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс Π½Π΅ наслСдуСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Qt—класс. ΠŸΡ€ΠΈ использовании Ρ„ΠΎΡ€ΠΌΡ‹ Π² main.cpp ΠΌΡ‹ создаСм QDialog ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setupUi().

Если Π²Ρ‹ станСтС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅ совсСм Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ трСбуСтся:

β€’ ΠΊΠ½ΠΎΠΏΠΊΠ° OK всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π² Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ состоянии;

β€’ ΠΊΠ½ΠΎΠΏΠΊΠ° Cancel Π½Π΅ выполняСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий;

β€’ ΠΏΠΎΠ»Π΅ рСдактирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ любой тСкст, Π° ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимоС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ячСйки.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ, написав Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт QDialog ΠΈ Ui::GoToCellDialog ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (подтвСрТдая извСстноС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²). По нашим ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΌΡ‹ Π΄Π°Π΅ΠΌ этому Π½ΠΎΠ²ΠΎΠΌΡƒ классу Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ гСнСрируСтся компилятором uic, Π½ΠΎ Π±Π΅Π· прСфикса Ui::.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, создайтС Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ gotocelldialog.h, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

01 #ifndef GOTOCELLDIALOG_H

02 #define GOTOCELLDIALOG_H

03 #include <QDialog>

04 #include "ui_gotocelldialog.h"

05 class GoToCellDialog : public QDialog, public Ui::GoToCellDialog

06 {

07 Q_OBJECT

08 public:

09 GoToCellDialog(QWidget *parent = 0);

10 private slots:

11 void on_lineEdit_textChanged();

12 };

13 #endif

РСализация ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса дСлаСтся Π² Ρ„Π°ΠΉΠ»Π΅ gotocelldialog.cpp:

01 #include <QtGui>

02 #include "gotocelldialog.h"


03 GoToCellDialog::GoToCellDialog(QWidget *parent)

04 : QDialog(parent)

05 {

06 setupUi(this);

07 QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");

08 lineEdit->setValidator(new QRegExpValidator(regExp, this));

09 connect(okButton, SIGNAL(clicked()),

10 this, SLOT(accept()));

11 connect(cancelButton, SIGNAL(clicked()),

12 this, SLOT(reject()));

13 }


14 void GoToCellDialog::on_lineEdit_textChanged()

15 {

16 okButton->setEnabled(lineEdit->hasAcceptableInput());

17 }

Π’ конструкторС ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ setupUi() для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. Благодаря мноТСствСнному наслСдованию ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ нСпосрСдствСнно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ класса Ui::GoToCellDialog. ПослС создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса setupUi() Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ всС слоты с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° on_objectName_signalName() ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ сигналу signalName() Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° objectName. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ setupUi() Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ соСдинСниС «сигнал—слот»:

connect(lineEdit, SIGNAL(textChanged(const QString &)),

this, SLOT(on_lineEdit_textChanged()));

Π’Π°ΠΊΠΆΠ΅ Π² конструкторС ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° допустимый Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Qt обСспСчиваСт Ρ‚Ρ€ΠΈ встроСнных класса ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: QIntValidator, QDoubleValidator ΠΈ QRegExpValidator. Π’ нашСм случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ QRegExpValidator, задавая рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«[Aβ€”Zaβ€”z][1β€”9][0β€”9]{0,2}Β», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: допускаСтся ΠΎΠ΄Π½Π° малСнькая ΠΈΠ»ΠΈ большая Π±ΡƒΠΊΠ²Π°, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт ΠΎΠ΄Π½Π° Ρ†ΠΈΡ„Ρ€Π° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 9; Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ΄ΡƒΡ‚ ноль, ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π΄Π²Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 9. (Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² рСгулярныС выраТСния Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ классу QRegExp.)