различные вложенные комбинации менед­жеров компоновки QHBoxLayout, QVBoxLayout и QGridLayout, можно построить очень сложные диалоговые окна.


Рис. 2.2. Менеджеры компоновки диалогового окна поиска данных

Для диалогового окна поиска мы используем два менеджера горизонтальной компоновки QHBoxLayout и два менеджера вертикальной компоновки QVBoxLayout (см. рис. 2.2). Внешний менеджер компоновки является главным; он устанавливает­ся в FindDialog в строке 35 и ответственен за всю область, занимаемую диалоговым окном. Остальные три менеджера компоновки являются внутренними. Показанная в нижнем правом углу на рис. 2.2 маленькая «пружинка» является пустым промежут­ком («распоркой»). Она применяется для образования ниже кнопок Find и Close пустого пространства, обеспечивающего перемещение кнопок в верхнюю часть свое­го менеджера компоновки.

Наконец, мы задаем название диалогового окна и устанавливаем фиксированной его высоту, поскольку в диалоговом окне нет виджетов, которым может понадобить­ся дополнительное пространство по вертикали. Функция QWidget:: sizeHint() воз­вращает «идеальный» размер виджета.

На этом завершается рассмотрение конструктора FindDialog. Поскольку нами использован оператор new при создании виджетов и менеджеров компоновки, нам, по-видимому, придется написать деструктор, где будут предусмотрены операторы delete для удаления каждого созданного нами виджета и менеджера компоновки. Но поступать так не обязательно, поскольку Qt автоматически удаляет дочерние объекты при разрушении родительского объекта, а все дочерние виджеты и менеджеры ком­поновки являются потомками FindDialog.

Одна из особенностей классов менеджеров компоновки заключается в том, что они не являются виджетами. Взамен этого они наследуют свойства класса QLayout, который, в свою очередь, является наследником класса QObject. На данном рисунке виджеты выделены сплошными линиями, а менеджеры компоновки очерчены пунк­тирными линиями, чтобы подчеркнуть их различие. При работе приложения менед­жеры компоновки невидимы.

При добавлении внутренних менеджеров компоновки к родительскому менед­жеру компоновки (строки 25,33 и 34) для них автоматически устанавливается роди­тельская связь. Затем, когда главный менеджер компоновки устанавливается для диалога (строка 35),


<< назад вперед >>