В прошлой записи был поднят вопрос о создании программы, кросс-платформенность которой будет состоять не только в существовании на нескольких платформах, но и в простой компиляции на этих платформах. Желательно при минимальных изменениях кода. А лучше вообще без изменений. В качестве подопытной программы я оставил те же куранты, что и в прошлый раз. А в качестве фреймверка для разработки - Qt. Средой разработки будет Eclipse. Начинается все с того, что нужно установить фреймверк. Скачать его можно с официального сайта. Для ознакомления вполне достаточно свободной версии - переходим во вкладку LGPL: Тутнасинтересуетпункт Qt libraries 4.6.3 for Windows (minGW 4.4, 280 MB). Объем довольно внушительный, но выбрать лишь необходимую часть возможности нет - придется качать все. Удобно, что SDK представляет собой исполняемый файл, который все разложит как надо. По этому, после закачки достаточно запустить установщик, покликать Дальше-дальше и все будет готово. В Linux процедура еще тривиальнее - даже на сайт идти не нужно. Совершаем поиск по запросу qt4-dev в своем пакетном менеджере, отмечаем его для установки и кликаем Применить. Все, что нужно дополнительно пакетный менеджер выкачает сам. Останется лишь прицепить поддержку разработки на Qt к Eclipse. Об этом тоже уже позаботились: на том же qt.nokia.com в разделе для разработчиков есть все, что нужно: Выбираем архив для нужной нам платформы и скачиваем его. Пользователи Windows снова получат исполняемый файл, который сам развернет плагин, нужно только указать ему каталог, в который установлен Eclipse. Пользователям Linux придется разархивировать и поместить плагин в каталог Eclipse самостоятельно. После того, как вы все сделаете в Эклипс появятся соответствующие пункты меню, для создания проектов на Qt Выбираем создание проекта для консольного приложения. Вот мы и добрались непосредственно до кода. На этот раз он будет таким: Рассмотрим отличия от предыдущих версий. Первыми, по порядку, идут подключаемые библиотеки: QDateTime - библиотека с функцией для работы со временем QSound - как нетрудно догадаться, библиотека для работы со звуком QThread - библиотека для управления потоками. Из нее нам потребуется функция sleep Основная функция и объявление переменных для хранения часов, минут и секунд такие же, как в прошлый раз. Для хранения времени потребуется переменная особого типа QTime. Я назвал ее currenttime - текущее время. Дальше мы снова начинаем вечный цикл и первым делом получаем текущее время используя метод класса QTime, который называется currentTime. Полученные данные помещаются в переменную с почти таким же названием, описанную абзацем выше. Переменная currenttime представляет собой структуру, обращаясь к разным полям которой можно получить необходимые данные. Воспользуемся этим и поместим в специальные переменные значения, соответствующие часам, минутам и секундам. Вообще, можно было бы и дальше использовать конструкции currenttime.hour() и т.д., но это показалось мне не слишком удобным и несколько громоздким. Перевод количества часов в двенадцатиричную систему не притерпел изменений. А вот со sleep пришлось повозиться. Дело в том, что в Qt метод sleep является статическим защищенным методом класса QThread. То есть просто так вызвать sleep(1) в программе нельзя. Но можно создать наследника класса QThread, в котором этот метод сделать доступным. Это мы и делаем дальше. Класс я решил назвать SleepClass, потому что он затевался лишь для того, чтобы получить доступ к одной единственной функции. После этого обращаемся к sleep уже как к методу нашего нового класса - SleepClass::sleep(1); Единичка в скобках - число секунд, которые поток будет спать. Условия срабатывания курантов - без изменений. Но изменился способ воспроизведения звука - теперь это Qt-функция QSound:lay, которой в скобках передается имя файла, который будет воспроизведен. Имя файла в данном случае задано без пути, поэтому файл должен располагаться в том же каталоге, что и сама программа. Вот мы и подошли к концу - закрываем фигурные скобки, вписываем дежурный return 0 и с замиранием сердца компилируем. Точнее дважды компилируем - один раз в Windows, а второй в Linux. Никаких сюрпризов - один и тот же код нормально скомпилировался в обоих операционных системах. Задача выполнена. Единственное, о чем следует помнить - при переносе программы нужно брать с собой и библиотеки, функции из которых вы использовали.