Читаем QT 4: программирование GUI на С++ полностью

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. Менеджеры компоновки обеспечивают осмысленные, принимаемые по умолчанию значения параметров для каждого типа виджета и учитывают идеальный размер каждого виджета, который, в свою очередь, обычно зависит от шрифта виджета, его стиля и содержимого. Менеджеры компоновки также учитывают максимальные и минимальные размеры и автоматически подстраивают компоновку в ответ на изменения шрифта, изменения содержимого и изменения размеров окна.

Существует три наиболее важных менеджера компоновки: 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);

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже