Программирование на C++ с использованием библиотеки Qt4



         

Листинг 10. Менеджеры размещения (файл examples-qt/04/04.cpp)


// Создаём менеджер размещения: 52 QGridLayout *mainlay = new QGridLayout(); // Размер полей вокруг сетки элементов и // интервалы между ячейками сетки: 53 mainlay->setMargin(2); 54 mainlay->setSpacing(3); 55 // Размещаем элементы: 56 mainlay->addWidget(lb, 0, 0); 57 mainlay->addWidget(le, 0, 1, 1, 2); 58 59 mainlay->addWidget(cb, 1, 0, 1, 2); 60 mainlay->addWidget(sb, 1, 2); 61 62 mainlay->addWidget(chb, 2, 0); 63 mainlay->addWidget(dsb, 2, 1, 1, 2); 64 65 mainlay->addWidget(dte, 3, 0, 1, 3); 66 // Менеджер размещения для радиокнопок: 67 QHBoxLayout *hbl = new QHBoxLayout(); 68 hbl->addWidget(rb1, 1); 69 hbl->addWidget(rb2, 1); 70 hbl->addWidget(rb3, 1); 71 gb->setLayout(hbl); 72 mainlay->addWidget(gb, 4, 0, 1, 3); 73 // Менеджер размещения для кнопок диалога: 74 QHBoxLayout *btns = new QHBoxLayout(); 75 btns->addStretch(1); 76 btns->addWidget(btn1, 2); 77 btns->addWidget(btn2, 2); 78 btns->addStretch(1); 79 mainlay->addLayout(btns, 6, 0, 1, 3); 80 // Растяжимость колонок и строк: 81 mainlay->setColumnStretch(1, 1); 82 mainlay->setColumnStretch(2, 1); 83 mainlay->setRowStretch(5, 1); 84 setLayout(mainlay); 85 }

Для вставки любого виджета в нужную ячейку QGridLayout предназначен метод addWidget, при вызове которого указываются номер строки и столбца (нумерация начинается с нуля), а также, если требуется, количество соседних строк и столбцов, которые будет занимать элемент. Растяжимостью строк и столбцов сетки управляют методы setRowStretch и setColumnStretch, первый параметр которых указывает номер строки (столбца), а второй -- коэффициент растяжения. Чем он больше, тем сильнее будет растягиваться/сжиматься данная строка по вертикали (или столбец по горизонтали) по сравнению с остальными строками (столбцами) при изменении размеров всего окна.

Разумеется, в данном случае можно предложить и другие варианты, например, на внешнем уровне использовать QVBoxLayout и заполнять его менеджерами QHBoxLayout, в которые вставлять элементы каждой горизонтальной строки диалога, подобно тому, как это сделано с радиокнопками в нашем примере.

Если нас не удовлетворяет то, как ведут себя какие-либо элементы диалога при изменении размеров окна, то можно попытаться вызвать для них метод setSizePolicy, первый параметр которого задаёт политику изменения ширины элемента, а второй -- его высоты. Каждый параметр может принимать одно из значений:

  • QSizePolicy::Fixed -- размер элемента в данном направлении не изменяется;
  • QSizePolicy::Minimum -- "идеальным" размером элемента считается его минимальный размер. Элемент может растягиваться, но не может сжиматься;
  • QSizePolicy::Maximum -- "идеальным" размером элемента считается его максимальный размер. Элемент может сжиматься, но не может растягиваться;
  • QSizePolicy::Preferred -- элемент "старается" поддерживать некоторый предпочтительный для него размер, но при необходимости может растянуться или сжаться;
  • QSizePolicy::Expanding -- элемент "старается" принять максимально возможный доступный ему размер, но при необходимости может и сжиматься.




Содержание  Назад