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

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

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

1. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ высоту Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π² Π½Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ части.

2. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавишС Ctrl (Alt Π² систСмС Mac) Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ элСмСнту Π³Ρ€ΡƒΠΏΠΏΡ‹ Primary Key (ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡) для создания ΠΊΠΎΠΏΠΈΠΈ элСмСнта Π³Ρ€ΡƒΠΏΠΏΠ° (ΠΈ Π΅Π³ΠΎ содСрТимого) Π½Π°Π΄ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом. ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ эту копию Π½ΠΈΠΆΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ наТимая ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Ctrl (ΠΈΠ»ΠΈ Alt). ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ этот процСсс для создания Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ элСмСнта Π³Ρ€ΡƒΠΏΠΏΠ°, размСщая Π΅Π³ΠΎ Π½ΠΈΠΆΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта Π³Ρ€ΡƒΠΏΠΏΠ°.

3. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈΡ… свойство title Π½Π° значСния Β«&Secondary KeyΒ» (Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡) ΠΈ Β«&Tertiary KeyΒ» (Ρ‚Ρ€Π΅Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡).

4. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ растяТку ΠΈ располоТитС Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтом Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ элСмСнтом Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

5. РасполоТитС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π² сСткС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 2.12 (Π°).

6. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Π»ΡŽΠ±Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ мСню Form | Lay Out in a Grid (Π€ΠΎΡ€ΠΌΠ° | Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² сСткС). Π€ΠΎΡ€ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½Π° рис. 2.12 (Π±).

7. Бвойство sizeHint (Β«ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉΒ» Ρ€Π°Π·ΠΌΠ΅Ρ€) Π΄Π²ΡƒΡ… Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… растяТСк установитС Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ [20, 0].

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π² ячСйках сСтки Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π° столбца ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ строки β€” всСго восСмь ячССк. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, лСвая Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ распорка, элСмСнт Π³Ρ€ΡƒΠΏΠΏΠ° Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ элСмСнт Π³Ρ€ΡƒΠΏΠΏΠ° Ρ‚Ρ€Π΅Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ячСйку. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, содСрТащий ΠΊΠ½ΠΎΠΏΠΊΠΈ OK, Cancel ΠΈ More, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π΅ ячСйки. Π‘ΠΏΡ€Π°Π²Π° Π²Π½ΠΈΠ·Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²Π΅ свободныС ячСйки. Если Ρƒ вас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ другая ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°, ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ всС сначала.

Рис. 2.12. РасполоТСниС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов Ρ„ΠΎΡ€ΠΌΡ‹ Π² сСткС.

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° Β«SortDialogΒ» (Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ сортировки) ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½Π° Β«SortΒ» (сортировка). Π—Π°Π΄Π°ΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 2.13.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ мСню Edit | Edit Tab Order. Π©Π΅Π»ΠΊΠ°ΠΉΡ‚Π΅ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΌΡƒ списку, начиная с Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ заканчивая Π½ΠΈΠΆΠ½ΠΈΠΌ, Π·Π°Ρ‚Π΅ΠΌ Ρ‰Π΅Π»ΠΊΠ°ΠΉΡ‚Π΅ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ OK, Cancel ΠΈ МогС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ располоТСны справа. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ мСню Edit | Edit Widgets для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° установки ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ клавишС табуляции.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ„ΠΎΡ€ΠΌΠ° спроСктирована, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, устанавливая Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ соСдинСния «сигнал—слот». Qt Designer позволяСт ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ соСдинСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹. Нам трСбуСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄Π²Π° соСдинСния.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ мСню Edit | Edit Signals/Slots (ΠŸΡ€Π°Π²ΠΊΠ° | Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сигналы ΠΈ слоты) для Π²Ρ…ΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌ формирования соСдинСний Π² Qt Designer. БоСдинСния прСдставлСны синими стрСлками ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌΠΈ Π²Ρ‹Π±Ρ€Π°Π½ шаблон Β«Dialog with Buttons RightΒ», ΠΊΠ½ΠΎΠΏΠΊΠΈ OK ΠΈ CanceI ΡƒΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ слотам accept() ΠΈ reject() Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QDialog. Π­Ρ‚ΠΈ соСдинСния Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° сигналов ΠΈ слотов Qt Designer.

Рис. 2.13. ИмСна Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹.

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

Рис. 2.14. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹.

Π‘Π½Π°Ρ‡Π°Π»Π° устанавливаСтся соСдинСниС ΠΌΠ΅ΠΆΠ΄Ρƒ moreButton ΠΈ secondaryGroupBox. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ эти Π΄Π²Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° красной стрСлкой, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ toggled(bool) Π² качСствС сигнала ΠΈ setVisible(bool) Π² качСствС слота. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Qt Designer Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π² спискС слотов setVisible(bool), Π½ΠΎ ΠΎΠ½ появится, Ссли Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌ Β«Show all signals and slotsΒ» (ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС сигналы ΠΈ слоты).

Рис. 2.15. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ соСдинСний Π² QtDesigner.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ соСдинСниС устанавливаСтся ΠΌΠ΅ΠΆΠ΄Ρƒ сигналом toggled(bool) Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° moreButton ΠΈ слотом setVisible(bool) Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° tertiaryGroupBox. ПослС установки соСдинСния Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ мСню Edit | Edit Widgets для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° установки соСдинСний.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ sortdialog.ui Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ sort. Для добавлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° основС мноТСствСнного наслСдования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌΠΈ примСнялся Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ для Π΄ΠΈΠ°Π»ΠΎΠ³Π° Β«Go-to-CellΒ».

Π‘Π½Π°Ρ‡Π°Π»Π° создаСм Ρ„Π°ΠΉΠ» sortdialog.h со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

01 #ifndef SORTDIALOG_H

02 #define SORTDIALOG_H

03 #include <QDialog>

04 #include "ui_sortdialog.h"

05 class SortDialog : public QDialog, public Ui::SortDialog

06 {

07 Q_OBJECT

08 public:

09 SortDialog(QWidget *parent = 0);

10 void setColumnRange(QChar first, QChar last);

11 };

12 #endif


Π—Π°Ρ‚Π΅ΠΌ создаСм sortdialog.cpp:

01 #include <QtGui>

02 #include "sortdialog.h"


03 SortDialog::SortDialog(QWidget *parent)

04 : QDialog(parent)

05 {

06 setupUi(this);

07 secondaryGroupBox->hide();

08 tertiaryGroupBox->hide();

09 layout()->setSizeConstraint(QLayout::SetFixedSize);

10 setColumnRange('А', 'Z');

11 }


12 void SortDialog::setColumnRange(QChar first, QChar last)

13 {

14 primaryColumnCombo->clear();

15 secondaryColumnCombo->clear();

16 tertiaryColumnCombo->clear();


17 secondaryColumnCombo->addItem(tr("None"));

18 tertiaryColumnCombo->addItem(tr("None"));


19 primaryColumnCombo->setMinimumSize(

20 secondaryColumnCombo->sizeHint());

21 QChar ch = first;

22 while (ch <= last) {

23 primaryColumnCombo->addItem(QString(ch));

24 secondaryColumnCombo->addItem(QString(ch));

25 tertiaryColumnCombo->addItem(QString(ch));

26 ch = ch.unicode() + 1;

27 }

28 }

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ прячСт Ρ‚Ρƒ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π³Π΄Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ поля Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Он Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСт свойство sizeConstraint ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ QLayout::SetFixedSize, Π½Π΅ позволяя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ·ΠΌΠ΅-

ΠžΡ‚ составитСля. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° β„–42 Π² исходном DjVu Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°! Π£ ΠΊΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ β€” Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅.

Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² Qt Π΄Ρ€ΡƒΠ³ΠΎΠΉ распространСнный Ρ‚ΠΈΠΏ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½, многостраничныС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°, Π΄Π°ΠΆΠ΅ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΈ использовании Qt Designer. Π’Π°ΠΊΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами:

β€’ ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ ΠΎΠΊΠ½ΠΎ с Π²ΠΊΠ»Π°Π΄ΠΊΠ°ΠΌΠΈ QTabWidget. Π—Π΄Π΅ΡΡŒ свСрху ΠΎΠΊΠ½Π° имССтся полоска Π²ΠΊΠ»Π°Π΄ΠΎΠΊ, которая находится ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ стСка QStackedWidget;

β€’ ΠΌΠΎΠΆΠ½ΠΎ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ список QListWidget ΠΈ стСк QStackedWidget, Π³Π΄Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт списка Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ страницу, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ стСком QStackedWidget, обСспСчив связь сигнала QListWidget::currentRowChanged() со слотом QStackedWidget::setCurrentIndex();

β€’ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ структуры QTreeWidget совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ со стСком QStackedWidget, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС.

Класс стСка QStackedWidget рассматриваСтся Π² Π³Π»Π°Π²Π΅ 6 (Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉΒ»).

ДинамичСскиС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°

ДинамичСскими Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° основС Ρ„Π°ΠΉΠ»ΠΎΠ² .ui, сдСланных Π² Qt Designer, Π²ΠΎ врСмя выполнСния прилоТСния. ВмСсто прСобразования Ρ„Π°ΠΉΠ»Π° .ui компилятором uic Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π‘++ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ» Π½Π° этапС выполнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс QUiLoader:

QUiLoader uiLoader;

QFile file("sortdialog.ui");

QWidget *sortDialog = uiLoader.load(&file);

if (sortDialog) {

…

}

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ доступ ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QObject::findChild<T>():

QComboBox *primaryColumnCombo =

sortDialog->findChild<QComboBox *>("primaryColumnCombo");

if (primaryColumnCombo) {

…

}

Ѐункция findChild<T>() являСтся шаблонной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉβ€”Ρ‡Π»Π΅Π½ΠΎΠΌ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚ΠΈΠΏΡƒ. Π­Ρ‚Π° функция отсутствуСт для MSVC 6 ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ этого компилятора. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор MSVC 6, вмСсто этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ слСдуСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ qFindChild<T>(), которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅.

Класс QUiLoader располоТСн Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Для использования класса QUiLoader Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Qt ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» .pro ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

CONFIG += uitools

ДинамичСскиС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ элСмСнтов Ρ„ΠΎΡ€ΠΌΡ‹ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ компиляции прилоТСния. Они ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания Β«Ρ‚ΠΎΠ½ΠΊΠΈΡ…Β» клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π² исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ встраиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основная Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Π° всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.