Учебное пособие по виджетам
|
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 © 2009 Nokia Corporation and/or its subsidiary(-ies) | Торговые марки | Qt 4.5.3 |
|
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |