Читать «QT 4: программирование GUI на С++» онлайн - страница 11

Жасмин Бланшет

Рис. 1.3. Приложение Quit (завершить работу).

Теперь мы построим приложение. Мы предполагаем, что вами создан каталог quit и в нем находится файл quit.cpp. Выполните команду qmake из каталога quit для формирования файла проекта, затем используйте полученный файл для создания файла makefile:

qmake -project

qmake quit.pro

Теперь постройте приложение и запустите его на выполнение. Если вы нажмете кнопку quit или клавишу пробела на клавиатуре (она также приводит к нажатию этой кнопки), приложение завершит свою работу.

Компоновка виджетов

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

Это приложение состоит из трех виджетов: QSpinBox, QSlider и QWidget. QWidget является главным окном приложения. Виджеты QSpinBox и QSlider помещены внутрь QWidget, и они являются дочерними виджетами по отношению к QWidget. С другой стороны, мы можем сказать, что QWidget является родительским виджетом по отношению к QSpinBox и QSlider. Сам QWidget не имеет родителя, потому что используется в качестве окна самого верхнего уровня. Конструкторы QWidget и все его подклассы принимают параметр QWidget *, задающий родительский виджет.

Рис. 1.4. Приложение Age (возраст).

Ниже приводится исходный код:

01 #include <QApplication>

02 #include <QHBoxLayout>

03 #include <QSlider>

04 #include <QSpinbox>

05 int main(int argc, char *argv[])

06 {

07 QApplication app(argc, argv);

08 QWidget *window = new QWidget;

09 window->setWindowTitle("Enter Your Age");

10 QSpinBox *spinBox = new QSpinBox;

11 QSlider *slider = new QSlider(Qt::Horizontal);

12 spinBox->setRange(0, 130);

13 slider->setRange(0, 130);

14 QObject::connect(spinBox, SIGNAL(valueChanged(int)),

15 slider, SLOT(setValue(int)));

16 QObject::connect(slider, SIGNAL(valueChanged(int)),

17 spinBox, SLOT(setValue(int)));

18 spinBox->setValue(35);

19 QHBoxLayout *layout = new QHBoxLayout;

20 layout->addWidget(spinBox);

21 layout->addWidget(slider);

22 window->setLayout(layout);

23 window->show();

24 return app.exec();

25 }

Строки 8 и 9 создают и настраивают виджет QWidget, который является главным окном приложения. Нами вызывается функция setWindowTitle() для вывода текстовой строки в заголовке окна.