Чтение онлайн

на главную

Жанры

Основы программирования в Linux
Шрифт:

Есть три конструктора

QVBoxLayout
, заслуживающих внимания (у объектов
QHBoxLayout
идентичный API).

QVBoxLayout::QVBoxLayout(QWidget *parent, int margin, int spacing,

 const char *name)

QVBoxLayout::QVBoxLayout(QLayout *parentLayout, int spacing,

 const char * name)

QVBoxLayout::QVBoxLayout(int spacing, const char *name)

Родителем

объекта
QLayout
может быть либо виджет, либо другой объект типа
QLayout
. Если не задавать родительский объект, вы сможете только вставить позже данную схему размещения в другой объект
QLayout
с помощью метода
addLayout
.

Параметры margin и spacing задают пустое пространство в пикселах вокруг схемы размещения

QLayout
и между отдельными виджетами в ней.

После создания вашей схемы размещения

QLayout
вы можете вставлять дочерние виджеты или схемы с помощью следующей пары методов:

QBoxLayout::addWidget(QWidget *widget, int stretch = 0, int alignment = 0);

QBoxLayout::addLayout(QLayout *layout, int stretch = 0);

Выполните упражнение 17.3.

Упражнение 17.3. Применение классов
QBoxLayout

В этом примере вы увидите в действии классы

QBoxLayout
при размещении виджетов
QLabel
в окне
QMainWindow
.

1. Сначала введите заголовочный файл LayoutWindow.h:

#include <qmainwindow.h>

class LayoutWindow : public QMainWindow {

 QOBJECT

public:

 LayoutWindow(QWidget *parent = 0, const char *name = 0);

virtual ~LayoutWindow;

};

2. Теперь введите реализацию в файл LayoutWindow.cpp:

#include <qapplication.h>

#include <qlabel.h>

#include <qlayout.h>

#include "LayoutWindow.moc"

LayoutWindow::LayoutWindow(QWidget* parent, const char *name) :

 QMainWindow(parent, name) {

 this->setCaption("Layouts");

3. Необходимо создать фиктивный

QWidget
для хранения объекта
QHBoxLayout
, поскольку его нельзя напрямую вставить в объект
QMainWindow
:

 QWidget *widget = new QWidget(this);

 setCentralWidget(widget);

 QHBoxLayout *horizontal = new QHBoxLayout(widget, 5, 10, "horizontal");

 QVBoxLayout *vertical = new QVBoxLayout;

 QLabel* label1 = new QLabel("Top", widget, "textLabel1");

 QLabel* label2 = new QLabel("Bottom", widget, "textLabel2");

 QLabel* label3 = new QLabel("Right", widget, "textLabel3");

 vertical->addwidget(label1);

 vertical->addwidget(label2);

 horizontal->addLayout(vertical);

 horizontal->addWidget(label3);

 resize(150, 100);

}

LayoutWindow::~LayoutWindow { }

int main(int argc, char **argv) {

 QApplication app(argc, argv);

 LayoutWindow *window = new LayoutWindow;

 app.setMainWidget(window);

 window->show;

 return app.exec;

}

Как

и прежде, перед компиляцией нужно выполнить
moc
для заголовочного файла:

$ moc LayoutWindow.h -о LayoutWindow.moc

$ g++ -о layout LayoutWindow.cpp -I$QTDIR/include -L$QTDIR/lib -lqui

Выполнив эту программу, вы получите схему размещения ваших меток QLabel (рис. 17.4). Попробуйте изменить величину окна и посмотрите, как расширяются и сжимаются метки, заполняя все доступное пространство.

Рис. 17.4

Как это работает

Программа LayoutWindow.cpp создает два виджета упаковочных контейнеров, горизонтальный и вертикальный контейнер для размещения виджетов. Вертикальный контейнер получает две метки, описанные, соответственно, как

Top
и
Bottom
. Горизонтальный контейнер также содержит два виджета, метку, обозначенную
Right
, и вертикальный контейнер. Вы можете помещать компоновочные виджеты внутрь других компоновочных виджетов, как показано в данном примере.

Попробуйте изменить исходный текст программы в файле LayoutWindow.срр, чтобы поэкспериментировать и лучше понять, как работают компоновочные виджеты.

Мы рассмотрели основы применения Qt — сигналы и слоты, команду moc и средства компоновки. Теперь пора более внимательно изучить виджеты.

Виджеты Qt

Для каждого случая в Qt есть виджеты, и их подробное рассмотрение займет всю оставшуюся часть книги. В этом разделе мы познакомимся с виджетами Qt общего применения, включая виджеты для ввода данных, кнопки, обычные и раскрывающиеся списки.

Поделиться:
Популярные книги

Философия. Книга вторая. Просветление экзистенции

Ясперс Карл Теодор
Научно-образовательная:
философия
5.00
рейтинг книги
Философия. Книга вторая. Просветление экзистенции

Неукротимый Бастард. Дилогия

Измайлов Сергей
Неукротимый бастард
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неукротимый Бастард. Дилогия

Газлайтер. Том 40

Володин Григорий Григорьевич
40. История Телепата
Фантастика:
альтернативная история
аниме
попаданцы
6.00
рейтинг книги
Газлайтер. Том 40

Дагги-тиц

Крапивин Владислав Петрович
Детские:
детские приключения
7.71
рейтинг книги
Дагги-тиц

Весь Дэн Браун в одном томе

Браун Дэн
Детективы:
триллеры
прочие детективы
5.00
рейтинг книги
Весь Дэн Браун в одном томе

Хроники железных драконов

Суэнвик Майкл
Фантастика:
фэнтези
7.25
рейтинг книги
Хроники железных драконов

Неучтенный элемент. Том 11

NikL
11. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 11

Книга 4. Постижение высших миров

Лайтман Михаэль Семенович
Научно-образовательная:
прочая научная литература
религиоведение
5.00
рейтинг книги
Книга 4. Постижение высших миров

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

100 знаменитых отечественных художников

Вагман Илья Яковлевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
100 знаменитых отечественных художников

«То было давно… там… в России…»

Коровин Константин Алексеевич
1. Воспоминания, рассказы, письма в двух книгах
Проза:
проза прочее
6.25
рейтинг книги
«То было давно… там… в России…»

СССР

Идиатуллин Шамиль
Фантастика:
социально-философская фантастика
5.50
рейтинг книги
СССР

Золото Вильгельма

Искандер Фазиль Абдулович
Козы и Шекспир
Проза:
современная проза
5.00
рейтинг книги
Золото Вильгельма

Worm

Дж Мак Крей
Фантастика:
боевая фантастика
киберпанк
6.25
рейтинг книги
Worm