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

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

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

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

БущСствуСт Ρ‚Ρ€ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ: QHBoxLayout, QVBoxLayout ΠΈ QGridLayout. Π­Ρ‚ΠΈ классы Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ QLayout, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт основной каркас для ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ВсС эти Ρ‚Ρ€ΠΈ класса ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Qt Designer ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

НиТС приводится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ FindFileDialog, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ:

01 FindFileDialog::FindFileDialog(QWidget *parent)

02 : QDialog(parent)

03 {

04 QGridLayout *leftLayout = new QGridLayout;

05 leftLayout->addWidget(namedLabel, 0, 0);

06 leftLayout->addWidget(namedLineEdit, 0, 1);

07 leftLayout->addWidget(lookInLabel, 1, 0);

08 leftLayout->addWidget(lookInLineEdit, 1, 1);

09 leftLayout->addWidget(subfoldersCheckBox, 2, 0, 1, 2);

10 leftLayout->addWidget(tableWidget, 3, 0, 1, 2);

11 leftLayout->addWidget(messageLabel, 4, 0, 1, 2);


12 QVBoxLayout *rightLayout = new QVBoxLayout;

13 rightLayout->addWidget(findButton);

14 rightLayout->addWidget(stopButtpn);

15 rightLayout->addWidget(closeButton);

16 rightLayout->addStretch();

17 rightLayout->addWidget(helpButton);


18 QHBoxLayout *mainLayout = new QHBoxLayout;

19 mainLayout->addLayout(leftLayout);

20 mainLayout->addLayout(rightLayout);

21 setLayout(mainLayout);

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

23 }

Компоновка обСспСчиваСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ QHBoxLayout, ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π² ячСйках сСтки QGridLayout ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ QVBoxLayout. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ QGridLayout слСва ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ QVBoxLayout справа Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ рядом Π²Π½ΡƒΡ‚Ρ€ΠΈ внСшнСго ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° QHBoxLayout. ΠšΡ€ΠΎΠΌΠΊΠ° ΠΏΠΎ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ стиля Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°; ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QLayout::setMargin() ΠΈ QLayout::setSpacing().

Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Qt Designer, задавая ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ, выдСляя Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ рядом, ΠΈ выбирая ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню Form | Lay Out Horizontally, Form | Lay Out Vertically ΠΈΠ»ΠΈ Form | Lay Out in a Grid. ΠœΡ‹ использовали Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² Π³Π»Π°Π²Π΅ 2 для создания Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ Go-to-Cell ΠΈ Sort прилоТСния ЭлСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π°.

Рис. 6.3. Компоновка диалогового окна Find File.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ QHBoxLayout ΠΈ QVBoxLayout достаточно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ с QGridLayout Π΄Π΅Π»ΠΎ обстоит нСсколько слоТнСС. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ QGridLayout Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сСткой ячССк. ВСкстовая ΠΌΠ΅Ρ‚ΠΊΠ° QLabel, располоТСнная Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ этого ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (0, 0), a ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ строка рСдактирования QLineEdit ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (0, 1). Π€Π»Π°ΠΆΠΎΠΊ QCheckBox размСщаСтся Π² Π΄Π²ΡƒΡ… столбцах; ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ячСйки с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (2, 0) ΠΈ (2, 1). РасполоТСнныС ΠΏΠΎΠ΄ Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QTreeWidget ΠΈ QLabel Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Π²Π° столбца. Π’Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ addWidget() ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

layout->addWidget(видТeт, cтpoкa, cтoлбeц, колБтрок, колБтолбцов);

Π—Π΄Π΅ΡΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ являСтся Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вставляСтся Π² ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, (строка, столбСц) β€” ΠΊΠΎΡ€Ρ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π»Π΅Π²ΠΎΠΉ ячСйки, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, ΠΊΠΎΠ»Π‘Ρ‚Ρ€ΠΎΠΊ β€” количСство строк, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, ΠΈ ΠΊΠΎΠ»Π‘Ρ‚ΠΎΠ»Π±Ρ†ΠΎΠ² β€” количСство столбцов, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ»Π‘Ρ‚Ρ€ΠΎΠΊ ΠΈ ΠΊΠΎΠ»Π‘Ρ‚ΠΎΠ»Π±Ρ†ΠΎΠ² Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹, ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ€Π°Π²Π½ΠΎΠ΅ 1.

Π’Ρ‹Π·ΠΎΠ² addStretch() Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΎ нСобходимости выдСлСния свободного пространства Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅. Π”ΠΎΠ±Π°Π²ΠΈΠ² элСмСнт распорки, ΠΌΡ‹ заставляСм ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Close ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Help. B Qt Designer ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого эффСкта, вставляя распорку. Распорки Π² Qt Designer ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ синих Β«ΠΏΡ€ΡƒΠΆΠΈΠ½ΠΎΠΊΒ».

Помимо рассмотрСнных Π½Π°ΠΌΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ случаСв использованиС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π³ΠΎΠ΄Ρ‹. Если ΠΌΡ‹ добавляСм Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ ΠΈΠ»ΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΈΠ· Π½Π΅Π³ΠΎ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ автоматичСски адаптируСтся ΠΊ Π½ΠΎΠ²ΠΎΠΉ ситуации. Π’ΠΎ ΠΆΠ΅ самоС происходит, Ссли ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ hide() ΠΈΠ»ΠΈ show() для Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°. Если ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° измСняСтся, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° автоматичСски пСрСстраиваСтся, учитывая Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ автоматичСски ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ всСй Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° основС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹.

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

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ систСмС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ слСдуСт Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ. Qt обСспСчиваСт Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Π΅, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ значСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² для всСх своих встроСнных Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π΅ΡΡ‚ΡŒ всСвозмоТныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, всС-Ρ‚Π°ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² являСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹. QSizePolicy ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. НиТС приводятся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ значСния:

β€’ Fixed (фиксированноС) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ. Π Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° всСгда сохраняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ идСального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°;

β€’ Minimum ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° являСтся Π΅Π³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ. Π Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ мСньшС идСального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ нСобходимости вырасти для заполнСния доступного пространства;

β€’ Maximum ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° являСтся Π΅Π³ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ. Π Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎ Π΅Π³ΠΎ минимального идСального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°;

β€’ Preferred (ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° являСтся Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, Π½ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ нСобходимости ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒΡΡ;

β€’ Expanding (Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π½ΠΎ Π²ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ½ стрСмится ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ свои Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹.

На рис. 6.4 приводится ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ смысла Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ тСкстовая ΠΌΠ΅Ρ‚ΠΊΠ° QLabel с тСкстом «Какой-Ρ‚ΠΎ тСкст».

На рисункС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Preferred ΠΈ Expanding прСдставлСны ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ ΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅? ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹, содСрТащСй ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Preferred ΠΈ Expanding, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство отдаСтся Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌ Expanding, Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Preferred ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€.

Рис. 6.4. Бмысл Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².

БущСствуСт Π΅Ρ‰Π΅ Π΄Π²Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ²: MinimumExpanding ΠΈ Ignored. ΠŸΠ΅Ρ€Π²Π°Ρ Π±Ρ‹Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π΄ΠΊΠΈΡ… случаях для старых вСрсий Qt, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° Π½Π΅ примСняСтся; ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Expanding ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ minimumSizeHint(). ПослСдняя Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Expanding, Π½ΠΎ ΠΏΡ€ΠΈ этом игнорируСтся ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€.

ΠšΡ€ΠΎΠΌΠ΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² класс QSizePolicy Ρ…Ρ€Π°Π½ΠΈΡ‚ коэффициСнты растяТСния ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. Π­Ρ‚ΠΈ коэффициСнты растяТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для указания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. НапримСр, Ссли QTreeWidget располагаСтся Π½Π°Π΄ QTextEdit ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ QTextEdit Π±Ρ‹Π» Π² Π΄Π²Π° Ρ€Π°Π·Π° большС ΠΏΠΎ высотС, Ρ‡Π΅ΠΌ QTreeWidget, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ коэффициСнт растяТСния ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ для QTextEdit Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ коэффициСнт для QTreeWidget β€” Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1.

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ воздСйствия Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² установкС минимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эти ограничСния ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Но Ссли этого нСдостаточно, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ всСгда ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ подкласс Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sizeHint() для получСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π°ΠΌ идСального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.