Находясь в консольном режиме, войдите в каталог hello и задайте команду:
qmake -project
для создания файла проекта, независимого от платформы (hello.pro ), и затем задайте команду:
qmake hello.pro
для создания на основе файла проекта зависимого от платформы файла makefile .
Выполните команду make для построения программы . Затем выполняйте программу, задавая команду hello в системе Windows или ./hello в системе Unix и open hello.app в системе Mac OS X. Для завершения программы нажмите кнопку закрытия окна, расположенную в заголовке окна. Если вы используете Windows и установили версию Qt с открытым исходным кодом вместе с компилятором MinGW, вы получите ярлык для окна DOS, в котором переменные среды правильно настроены на Qt. Вызвав это окно, вы можете компилировать в нем Qtприложения, используя описанныевыше команды qmake и make. Формируемые исполнительные модули помещаются в папку debug или release, например, C:\qt-book\hello\release\hello.exe.
Если вы используете Visual С++ компании Microsoft, то вам потребуется выполнить команду nmake, а не make. Здесь вы можете поступить по-другому и создать проект в Visual Studio на основе файла hello.pro, выполняя команду:
qmake -tp vc hello.pro
и затем выполнить построение программы в системе Visual Studio. Если вы используете Xcode на Mac OS X, то можете сгенерировать проект Xcode с помощью следующей команды:
qmake -spec macx-xcode
Рис. 1.2. Текстовая метка с простым форматированием HTML.
Прежде чем перейти к следующему примеру, позволим себе небольшое развлечение, а именно заменим строку
QLabel *label = new QLabel("Hello Qt!");
на строку
QLabel *label = new QLabel("<h2><i>Hello</i> "
"<font color=red>Qt!</font></h2>");
и снова выполним построение приложения. Как иллюстрирует этот пример, совсем не трудно выделять элементы пользовательского интерфейса Qtприложения с использованием некоторых простых средств форматирования документов HTML.
Взаимодействие с пользователем
QLabel QPushButtonИсходный код этого приложения находится на компакт-диске в файле /examples/chap01/quit/quit.cpp. Ниже приводится содержимое этого файла:
01 #include <QAapplication>
02 #include <QPushButton.h>
03 int main(int argc, char *argv[])
04 {
05 QApplication app(argc, argv);
06 QPushButton *button = new QPushButton("Quit");
07 QObject::connect(button,
SIGNAL(clicked()),
08 &app, SL0T(quit()));
09 button->show();
10 return app.exec();
11 }
Виджеты Qt генерируют сигналыв ответ на выполнение пользователем какого-то действия или изменение состояния. Например, QPushButton генерируют сигнал clicked() при нажатии пользователем кнопки. Сигнал может быть связан с функцией (называемой слотом в данном контексте) для автоматического ее выполнения при получении данного сигнала. В нашем примере мы связываем сигнал кнопки clicked() со слотом quit() объекта приложения QApplication . Макросы SIGNAL() и SLOT() являются частью синтаксиса; более подробно они объясняются в следующей главе.
Рис. 1.3. Приложение Quit (завершить работу).
Теперь мы построим приложение. Мы предполагаем, что вами создан каталог quit и в нем находится файл quit.cpp . Выполните команду qmake из каталога quit для формирования файла проекта, затем используйте полученный файл для создания файла makefile:
qmake -project
qmake quit.pro
Теперь постройте приложение и запустите его на выполнение. Если вы нажмете кнопку quit или клавишу пробела на клавиатуре (она также приводит к нажатию этой кнопки), приложение завершит свою работу.
Компоновка виджетов
Это приложение состоит из трех виджетов: 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;