Учебное пособие по виджетам
|
QWidget *window = new QWidget(); window->resize(320, 240); window->show(); |
Мы можем добавить дочерний виджет к этому окну, передав в качестве родителя window в его конструктор. В этом случае мы добавили кнопку в окно и поместили его в заданную точку:
QPushButton *button = new QPushButton(tr("Press me"), window); button->move(100, 100); button->show(); |
Теперь кнопка является дочерним виджетом окна и будет удалена при разрушении окна. Обратите внимание на то, что сокрытие или закрытие автоматически не разрушает виджет.
Как правило, препочтительнее располагать дочерние виджеты внутри окна с использованием объектов компоновки, нежели с помощью явного указания позиции и размеров. Здесь мы создаем метку и виджет однострочного поля ввода, которые мы расположим рядом.
QLabel *label = new QLabel(tr("Name:")); QLineEdit *lineEdit = new QLineEdit(); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget(label); layout->addWidget(lineEdit); window->setLayout(layout); |
Созданный нами объект layout управляет расположением и размерами виджетов, присоединенных к нему помощью функции addWidget(). Сама компоновка присоединена к окну вызовом setLayout(). Компоновки видимы только за счет эффектов, которые они производят с виджетами (и другими компоновками), за управлением которыми они отвечают.
В приведенном выше примере, принадлежность каждого виджета не очищается немедленно. Сразу после того как мы создадим виджеты и компоновку без родительских объектов, мы ожидаем увидеть пустое окно и два отдельных окна, содержащих метку и однострочное поле ввода. Однако, когда мы передаем управление меткой и однострочным полем ввода компоновке и устанавливаем компоновку на окно, то и виджет, и компоновка сами по себе ''сменят родителя'', чтобы стать дочерними по отношению к окну.
Так же, как виджеты могут содержать в себе другие виджеты, компоновки могут использоваться для предоставления различных уровней группировки виджетов. Здесь мы хотим вывести на экране метку рядом с однострочным полем ввода в верхней части окна, выше представления таблицы, показывающей результаты запроса.
QLabel *queryLabel = new QLabel(tr("Query:")); QLineEdit *queryEdit = new QLineEdit(); QTableView *resultView = new QTableView(); QHBoxLayout *queryLayout = new QHBoxLayout(); queryLayout->addWidget(queryLabel); queryLayout->addWidget(queryEdit); QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->addLayout(queryLayout); mainLayout->addWidget(resultView); window->setLayout(mainLayout); |
Наряду с QHBoxLayout и QVBoxLayout, чтобы помочь с более сложными пользовательскими интерфейсами, Qt также предоставляет классы QGridLayout и QFormLayout .
Copyright © 2008 Nokia | Торговые марки | Qt 4.4.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |