№ 2 (38) 2012
М. В. Слива, канд. пед. наук, доцент Нижневартовского государственного гуманитарного университета
Кроссплатформенный подход как средство унификации обучения программированию в различных операционных системах
Одной из проблем, зачастую встающих перед разработчиками программного обеспечения, является освоение новой операционной системы. Предлагаемый автором подход к решению данной задачи позволит выпускникам повысить свою конкурентоспособность на рынке труда.
Введение
В последнее время все больше студентов вузов выбирают для своих компьютеров в качестве основной операционной системы (ОС) представителей семейства Linux (Debian, Ubuntu, Gentoo, CentOS и т. д.) [2]. Для этого есть несколько причин: наличие бесплатных версий ОС Linux, открытость кода ядра ОС, возможность экспериментирования с составом ОС, наличие бесплатного и открытого программного обеспечения для операционных систем семейства Linux и т. д., в том числе IT-мода (что для студентов является не последним фактором при выборе операционной системы). И в IT-сфере (как в бизнес-сообществе, так и в научных исследованиях) операционные системы семейства Linux также составляют все большую конкуренцию ОС Windows (в том числе на рынке мобильных устройств в виде ОС Android). Также не стоит забывать о Mac OS и iOS, занимающих определенную долю рынка операционных систем (причем в России — меньшую по сравнению с остальным миром, но увеличивающуюся с приростом устройств под управлением iOS). Естественно, что программы для одной операционной системы не работают под управлением другой ОС (за исключением переносимых исполнимых jar-файлов программ, созданных на языке программирования Java). Поэтому создателям программно-
го обеспечения для увеличения рынка сбыта своих приложений приходится портировать (переписывать с учетом особенностей конкретной ОС), а зачастую и создавать заново свои программы под разные операционные системы.
Все это накладывает определенные ограничения на преподавание программирования, так как в высших учебных заведениях нашей страны, в основном, работа студентов строится с учетом, как правило, одной операционной системы (обычно Windows). Исключения есть, но они лишь подтверждают правило. Получается, что студентам приходится осваивать программирование для других операционных систем самостоятельно или на всевозможных факультативах, спецкурсах и т. д.
На данный момент существует несколько подходов к созданию кроссплатформенных приложений. Рассмотрим их подробнее.
Подходы к кроссплатформенному программированию
Определим понятие кроссплатформен-ного программного обеспечения (ПО) следующим образом: ПО, работающее более чем на одной аппаратной платформе и/или операционной системе (с учетом или без учета перекомпиляции под целевую платформу, но без изменения исходного кода программы).
№ 2 (38) 2012
Проблема переносимости приложений с одной ОС на другую состоит в основном в использовании библиотек для создания графического интерфейса пользователя (ГИП или в англоязычной нотации GUI — graphical user interface) и системных библиотек конкретной операционной системы (плат-формозависимых библиотек). Соответственно, подходы к созданию кроссплатформен-ных приложений основываются на разных способах решения описанной проблемы.
Среди языков программирования в плане кроссплатформенности отдельно от всех стоит Java. Его подход состоит в том, что программы сначала транслируются в байт-код, который потом выполняется виртуальной машиной Java (JVM — Java Virtual Machine) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор [4]. То есть программы, написанные на Java, могут работать под управлением любой операционной системы на любом устройстве, если установлена виртуальная машина Java и есть все необходимые библиотеки.
Выделяютя следующие достоинства языка Java для кроссплатформенного программирования:
• это изначально объектно-ориентированный язык программирования, в котором сведено к минимуму влияние недостатков структурного подхода (но используется синтаксис языков программирования семейства С);
• поддержка java-апплетов большинством современных браузеров;
• кроссплатформенность на уровне установки виртуальной машины.
Недостатки языка Java для кроссплат-форменного программирования следующие:
• сложность изучения на начальном этапе обучения в высшем учебном заведении (1 - 2 курс) (хотя опыт преподавателей Стэн-фордского университета1 показывает, что
1 URL: http://www.stanford.edu/class/cs106a/cgi-bin/ — страница курса CS106A Стэнфордского университета.
такая возможность есть, но это достойно от- I дельной статьи); ^
• необходимость установки дополнитель- ^ ного программного обеспечения в виде виртуальной машины, без которой созданная программа не сможет работать (но большинство современных операционных систем уже устанавливаются с какой-нибудь версией виртуальной машины Java, так что этот недостаток относительный).
Баланс достоинств и недостатков сделал язык программирования Java одним из самых популярных языков профессионального программирования2 (хотя это необязательно должно говорить о качестве самого языка как средства программирования, статистика отображает именно популярность). Заметим, что при этом одновременно наблюдается тенденция к постепенному спаду интереса3 к языку программирования Java, что можно связать с растущей популярностью языков C# и Objective-C. Особенно актуальным стало изучение данного языка в связи с распространением мобильных платформ (в частности, ОС Android, приложения для которой пишутся в основном на языке программирования Java [3]).
Аналогичный подход реализован для языка C# от корпорации Microsoft, который создавался после выхода языка Java. То есть существует среда выполнения .NET Runtime, которая и выполняет все программы, написанные на языке C#. На данный момент имеется несколько кроссплатформен-ных проектов (Mono4, DotGNU5), реализующих выполнение С#-программ на различных
2 URL: http://www.tiobe.com/index.php/content/ paperinfo/tpci/index.html — TIOBE Programming Community Index (индекс популярности языков программирования).
3 URL: http://www.tiobe.com/index.php/paperinfo/tpci/ Java. html — статистика изменения популярности языка программирования Java.
4 URL: http://www.mono-project.com — официальный сайт проекта Mono.
5 URL: http://dotgnu.org — официальный сайт проекта DotGNU.
№ 2 (38) 2012
платформах. Достоинства и недостатки использования языка C# для кроссплатфор-менного программирования в основном такие же, как и у Java-подхода (хотя Java является более распространенным средством кроссплатформенного программирования по сравнению с C#).
Другой подход — это использование кроссплатформенных библиотек в стандартном языке (С, С++, Perl, Python, Ruby и др.). В настоящее время существует не-| сколько библиотек, активно используемых ^ в данных целях: GTK+, Qt, wxWidgets, FLTK, § Tk. Наиболее популярны в силу различных ! обстоятельств библиотеки GTk+6 и Qt. Из-I начально они создавались для программи-<| рования в ОС Linux: GTk+ — для рабоче-! го стола Gnome (а точнее, для создания й графического редактора GIMP, бесплат! ного аналога программы Adobe Photoshop), Qt — для рабочего стола KDE. В дальней-^ шем эти библиотеки получили развитие
1 в сторону кроссплатформенности. При-<§ чем отличием GTk+ является то, что с ее ¡1 использованием можно писать на языке Ц С программы с графическим интерфейсом Ц пользователя без использования объект-|| но-ориентированного подхода (это можно § в некоторой степени сравнить с програм-| мированием с использованием WinAPI, хотя
использование библиотеки GTk+ сущест-<| венно проще). Таким образом, имеется воз-g можность создавать современное ПО даже ■ц студентам 1 курса IT-специальностей, которые еще не изучали объектно-ориентиро-Ц ванное программирование (ООП) [1]. Для 5 помощи в создании графического интерфейса к программе, созданной с исполь-
2 зованием GTk+, имеется специальный ре-<| дактор интерфейсов Glade7, также кросс-Ц платформенный.
'5 Существуют следующие достоинства ic подхода к кроссплатформенному програм-
к 6 URL: http://www.gtk.org — официальный сайт про-
g екта GTK+.
и 7
<э 7 URL: http://glade.gnome.org — официальный сайт
¿с проекта Glade.
мированию с использованием кроссплат-форменных библиотек:
• используется стандартный язык программирования, новыми являются только средства, предоставляемые самой кросс-платформенной библиотекой;
• возможность использовать не только ООП, но и более простое структурное программирование (предшественник ООП).
Недостатки подхода к кроссплатфор-менному программированию с использованием кроссплатформенных библиотек следующие:
• необходимо устанавливать на базовую компьютерную платформу все содержимое используемой библиотеки для создания исходного кода, а с исполняемыми файлами готового приложения требуется устанавливать используемые средства библиотеки для целевой платформы (данный недостаток можно считать относительным, так как и в стандартном подходе к программированию все используемые библиотеки обычно переносятся с установочными файлами программы — если, конечно, они не являются стандартными для целевой платформы);
• не все кроссплатформенные библиотеки позволяют создавать интерфейс, сравнимый по разнообразию исполнения со стандартными средствами программирования для некоторых операционных систем, т. е. программист, придерживающийся кросс-платформенного подхода, ограничен возможностями выбранной библиотеки (этот недостаток также относительный, т. к. с каждой новой версией большинства кросс-платформенных библиотек средства по разнообразию создаваемого интерфейса увеличиваются).
Особое место в кроссплатформенном подходе к созданию ПО занимает веб-программирование. Это связано с тем, что веб-технологии сами по себе не привязаны к какой-либо одной платформе, а зависят от конкретных программ-браузеров, поддерживающих или не поддерживающих используемые конкретным сайтом или веб-программой средства. В связи с этим суще-
№ 2 (38) 2012
ствует даже понятие кроссбраузерности — свойство сайта отображаться и работать во всех популярных браузерах идентично. Под идентичностью здесь понимается отсутствие развалов верстки и способность отображать материал с одинаковой степенью читабельности [5]. Кроссплатформен-ными на данный момент уже можно считать технологии flash8 и java-апплетов/сервлетов [6, 7]. Поэтому еще одним подходом к созданию кроссплатформенного ПО считается веб-программирование.
Выделим достоинства веб-подхода к кроссплатформенному программированию:
• для работы созданного программного продукта в большинстве случаев достаточно программы-браузера;
• можно не устанавливать созданное программное обеспечение локально на компьютер конечного пользователя, а предоставлять доступ удаленно, например посредством апплетов и сервлетов.
Отметим недостатки веб-подхода к кросс-платформенному программированию:
• необходимость наличия специальной программы-браузера для работы созданного приложения (но такие программы есть во всех современных операционных системах);
• при использовании дополнительных веб-технологий (поддержка которых не поставляется вместе с браузером) требуется установка специального программного обеспечения (так называемых плагинов);
• некоторые ограничения на производительность и интерфейс приложений (влияние этого недостатка уменьшается с выходом новых версий браузеров, развитием веб-технологий и ростом мощностей процессоров);
• проблематичность работы с графикой (либо слишком сложная реализация, особенно приложений с использованием трех-
8 URL: http://www.adobe.com/products/flash.html — официальная страница Adobe Flash Professional CS5.5.
S
мерной графики, хотя с появлением новых | технологий ситуация постепенно улучша- ^ ется). ^
Кроссплатформенные IDE
Отдельно следует сказать о кроссплат-форменных IDE (Integrated development environment — интегрированная среда разработки — система программных средств, используемая программистами для разработки программного обеспечения [8]). Причем, если выявлять свойства, определяющие кроссплатформенность IDE, то они должны удовлетворять следующим параметрам:
• интегрированная среда разработки выглядит и действует одинаково в нескольких из основных на данный момент линиях операционных систем для персональных компьютеров: Linux, Windows, Mac OS;
• поддерживает программирование на кроссплатформенном языке программирования или позволяет использовать связку стандартный язык плюс кроссплатформен-ная библиотека;
• созданный исходный код является кроссплатформенным с учетом компиляции для целевой операционной системы.
В настоящее время можно выделить следующие кроссплатформенные IDE: Net-Beans, MonoDevelope, Qt Creator, Eclipse, IntelliJ IDEA.
Рассмотрим некоторые из них.
Qt Creator9 — кроссплатформенная IDE для работы с библиотекой Qt преимущественно на языке С++, т. е. это аналог среды разработки Visual Studio или Embarcadero RAD Studio (наследие Delphi) для создания программ с графическим интерфейсом на основе использования языка С++ с библиотекой Qt, что позволяет создавать кросс-платформенные (с учетом компиляции) приложения с использованием дизайнера интерфейсов. Основные достоинства среды разработки Qt Creator:
9 URL: http://qt.nokia.com — официальная страница
проекта Qt.
№ 2 (38) 2012
• она выглядит и действует одинаково во всех трех основных на данный момент линиях операционных систем для персональных компьютеров: Linux, Windows, Mac OS;
• поддерживает разработку приложений для мобильных устройств (ОС Symbian, MeeGo);
• содержит визуальный редактор интерфейсов, что облегчает проектирование внешнего вида создаваемого приложения;
• совместим с QML10 — языком декла-| ративного описания интерфейсов, кото-^ рый используется в связке с библиотекой § Qt и С++ [14];
jg • распространяется как на платных, так I и на бесплатных условиях (последнее осо-<| бенно актуально для учебных заведений). ! То есть можно создать проект в интегри-g рованной среде разработки Qt Creator под ! операционной системой Windows, скомпили-<5 ровать и запустить в ней, потом перенести J исходники в Qt Creator под Linux, скомпили-
1 ровать и запустить там, и то же самое — для
<§ Mac OS. Появилась возможность коллективен
¡1 ной разработки приложения в разных опе-
| рационных системах (т. е. один программист
Ц делает свой модуль в операционной систе-
|| ме Linux, другой — в ОС Windows, третий —
§ в Mac OS, далее все модули собираются
| в любой операционной системе и готовое приложение опять-таки можно компилиро-
<| вать в любой из поддерживаемых ОС).
g NetBeans11 — кроссплатформенная сво-
■ц бодная IDE для программирования на языках Java, JavaFX, Ruby, Python, PHP, JavaScript,
§ C++, Ada и ряде других. Из этого описания
Ц следует одно из достоинств NetBeans — количество поддерживаемых языков (расши-
2 ряемость за счет подключения нужных пла-<| гинов). NetBeans изначально создавался как Ц среда для программирования на языке Java, '5 так что естественно выбирать данную IDE,
& 10 URL: http://doc.trolltech.com/4.7-snapshot/ qdeclarativeintroduction.html — Introduction to the QML g Language (Введение в язык QML). u ii
о 11 URL: http://netbeans.org — официальная страница ¿с проекта NetBeans.
если в качестве кроссплатформенного инструментария выбран язык Java. Сама интегрированная среда разработки NetBeans написана также на языке Java [9].
Eclipse12 — свободная интегрированная среда разработки модульных кроссплат-форменных приложений. В своем назначении похожа на NetBeans (создавалась для программирования на языке Java, сама написана на Java, поэтому, как и NetBeans, естественно подходит для кроссплатфор-менного программирования с использованием Java). Эта среда является очень популярной благодаря возможности расширения с помощью плагинов, коих написано очень много (собственно, в этом Eclipse соревнуется с NetBeans, равно как и в звании лучшей среды программирования на языке Java) [10].
Кроссплатформенный подход в обучении программированию
Таким образом, используя какой-либо из подходов к кроссплатформенному программированию, а также кроссплатформен-ную IDE, можно строить преподавание программирования на основе одной интегрированной среды разработки, не ограничиваясь конкретной операционной системой и не вдаваясь в особенности разработки графического интерфейса для различных ОС (эту заботу берет на себя среда разработки и выбранный кроссплатформен-ный язык или библиотека — в зависимости от подхода).
В связи с вышеописанным имеет смысл использовать в целом кроссплатформен-ный подход к обучению программированию. Можно применять следующую методику обучения программированию:
Этап I: структурный. Изучаются основы языка С (изначально кроссплатформенного по определению), после чего возможно приступить к изучению использования кросс-
12 URL: http://www.eclipse.org — официальная страница проекта Eclipse.
№ 2 (38) 2012
платформенной библиотеки GTk+, с примерами как для Linux, так и для Windows (все отличия будут, в основном, в компиляции исходного кода). При этом использование неявной работы с объектами подготавливает обучаемых к объектно-ориентированному подходу в программировании [1]. Например, проанализируем простое приложение, написанное на языке С с использованием библиотеки GTK+:
#include <gtk/gtk.h>
int main (int argc, char *argv[]) {
GtkWidget *window;
// объявление переменной-указателя // типа GtkWidget gtk_init(&argc, &argv); // инициализация библиотеки GTK+ //создание окна
window = gtk_window_new(GTK_WINDOW_ TOPLEVEL);
//установка заголовка окна gtk_window_set_title(GTK_WINDOW (window),"1"); gtk_widget_show(window); //делаем окно видимым gtk_main();
// передаем управление GTK+ return 0;
Данная программа создает простое окно с заголовком, как показано на рис. 1.
Рис. 1. Вид простого окна, созданного с помощью GTK+
В рассмотренном примере неявно используется создание указателя на объект
s
window типа GtkWidget, но обращение к не- | му происходит обычным для С образом че- ^ рез функции, которым в качестве параметра ^ передается имя нужного объекта.
Если бы программирование велось с применением объектно-ориентированного подхода, то те же самые действия производились бы с помощью свойств и методов класса GtkWidget. Но в данном примере студенту, обучающемуся по специальности «Программное обеспечение вычислительной техники и автоматизированных систем» или «Прикладная математика», хватило бы тех знаний языка С, которые он получил на первом курсе (в ходе изучения таких дисциплин, как, например, «Программирование на ЯВУ» или «Алгоритмические языки и программирование», соответственно для выше обозначенных специальностей).
Также на этом этапе использование редактора интерфейсов Glade поможет освоить принцип WYSIWYG (What You See is What You Get — «что видишь, то и получишь» — принцип функционирования современных IDE со встроенными редакторами интерфейсов), который будет использоваться на дальнейших этапах изучения программирования (хотя можно создавать современные программы и без редакторов интерфейсов) [11].
Особое место на данном этапе следует уделить принципу соединения сигналов и слотов (аналог события и обработчика события), так как этот принцип используется и на следующих этапах (и не только при использовании библиотеки GTK+ — библиотека Qt также использует этот принцип). Сигнал (в терминологии GTk+ и Qt) — аналог события в терминологии программирования для операционной системы Windows, т. е. его порождает объект, на который воздействует пользователь (например, при щелчке левой кнопкой мыши на объекте в окне). Слот (или функция обратного вызова) — функция, которая соединяется с соответствующим сигналом конкретного объекта и вызывается каждый раз при срабатывании этого сигна-
№ 2 (38) 2012
!
SS
ё u
Ig
о §
£ £
о
if
! a
=i is
0
1 &
0 &
1
It
0
1
s t
u !
I
I !
I
u i
ла [12, 13]. Реализация данного механизма без объектно-ориентированного подхода может показаться странной или неестественной, но, тем не менее, это используется в программировании, особенно в ОС семейства Linux, что продемонстрируем на следующем простом примере:
#include <gtk/gtk.h>
// объявляем глобальные
переменные-указатели
// для создания нужных объектов
GtkWidget *window,*button,*edit,*vbox;
//создаем функцию обратного вызова
//(слот) для обработки
//нажатия на кнопку
void button_click (GtkWidget *button, gpointer data)
{ gtk_entry_set_text(GTK_ENTRY(edit),
"Нажата кнопка");}
int main (int argc, char *argv[])
{ gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_
TOPLEVEL);
//создаем кнопку
button = gtk_button_new_with_label ("Нажать");
//создаем поле ввода/вывода edit = gtk_entry_new(); //создаем упаковочный контейнер vbox = gtk_vbox_new(TRUE,5); //вставляем объекты в созданный //контейнер
gtk_box_pack_start(GTK_BOX(vbox),edit, TRUE, FALSE,5);
gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, FALSE,5); gtk_window_set_title(GTK_WINDOW (window),"1");
//вставляем контейнер в окно gtk_container_add(GTK_CONTAINER (window), vbox);
//соединяем сигнал нажатия кнопки //с созданной функцией //обратного вызова button_click g_signal_connect(button, "clicked", G_CALLBACK (button_click),edit); //показываем окно со всеми объектами gtk_widget_show_all(window); gtk_main (); return 0; }
Данная программа расширяет предыдущий пример, добавляя в окно кнопку
и строку для ввода/вывода текста (рис. 2). При нажатии в поле появляется текст. Для компиляции и создания исполняемого файла достаточно набрать текст приведенной программы в любом текстовом редакторе, сохранить программу в файле, например, window.c, и откомпилировать с помощью следующей консольной команды:
gcc window. с -о window Npkg-config --cflags --libs gtk+-2.0N
Рис. 2. Вид окна с кнопкой и полем ввода/ вывода
Пример приведен для операционной системы семейства Linux, в результате получится исполняемый файл window. Для ОС семейства Windows действия аналогичны с учетом выбранного компилятора.
Этап II: объектно-ориентированный. На этапе осваивается объектно-ориентированный язык С++ (без платформо-зави-симых расширений в виде Visual C++ и т. п.). После этого изучается кроссплатформен-ная библиотека с объектным подходом (например, Qt). Рассматриваются способы написания кроссплатформенных приложений, создание графических интерфейсов, способы компиляции в различных операционных системах. При этом используются знания, полученные ранее на первом этапе (работа с объектами через указатели, соединение сигналов и слотов), но уже с явным использованием объектно-ориентированного подхода.
Этап III: изучение кроссплатформенных IDE. Рассматриваются особенности программирования с использованием интегрированных сред программирования (создание проекта, структура и содержимое проекта, особенности создания интерфейса, запуск программы на выполнение, отладка приложения, тестирование отдельных мо-
44
№ 2 (38) 2012
дулей и т. д.). Дополнительно на этом этапе возможно рассмотреть способы установки приложения на компьютер конечного пользователя (создание установочных пакетов, установка по локальной сети, через Интернет и т. д.).
Естественно, что в составе учебного плана каждый этап может быть реализован как в границах одной семестровой дисциплины, так и нескольких учебных семестров в рамках разных дисциплин. При этом могут рассматриваться несколько кроссплатформен-ных библиотек и языков (это даже предпочтительнее, так как позволит обучающимся увидеть и опробовать достоинства и недостатки различных языков и библиотек).
Из особенностей вышеописанного подхода выделим плавность перехода от структурного программирования к объектно-ориентированному, через неявное использование объектов на первом этапе обучения при работе с библиотекой GTK+, что позволит в дальнейшем ускорить процесс освоения ООП-парадигмы.
Заключение
В целом, кроссплатформенный подход к обучению программированию позволит получить на выходе из высшего учебного заведения универсального специалиста, не зависящего от выбора конкретной операционной системы или интегрированной среды разработки ПО (но знакомого с особенностями таковых). Такой выпускник способен создавать кроссплатформенное программное обеспечение, что, в свою очередь, увеличит его конкурентоспособность и востребованность на рынке труда. А наличие большого количества кроссплатформенно-го ПО, в том числе, может способствовать тому, что распространение операционных систем не будет зависеть от используемого конкретным пользователем программного обеспечения. Это окажется выгодно и для учебных заведений, которым не придется ориентироваться только на какую-то одну операционную систему.
Список литературы S
<2 ва
1. Слива М. В. Преподавание основ программиро- ^ вания в Linux как средство перехода от структурного программирования к объектно-ориентированному. В кн.: Физико-математические
и компьютерные науки в образовании: сборник научных трудов преподавателей, научных сотрудников, аспирантов. Нижневартовск: НГГУ, 2010.
2. Слива М. В. Преподавание с использованием ОС семейства Linux. В кн.: Информационные ресурсы в образовании: Материалы Всероссийской научно-практической конференции (Нижневартовск, 15 - 17 апреля 2010 года) / отв. ред. Т. Б. Казиахмедов. Нижневартовск: НГГУ, 2010.
3. Хашими С., Коматинени С., Маклин Д. Разработка приложений для Android. СПб.: Питер, 2011.
4. Шилдт Г. Полный справочник по Java. 7-е изд. Пер. с англ. М.: Вильямс, 2007.
5. URL: http://www.site-maker.spb.ru/articles02. php — Кроссбраузерность — одна из главных задач в разработке сайта.
6. URL: http://litvinuke.hut.ru/articles/Java06.htm — Учим Java. Апплеты. Взаимодействие с CGI.
7. URL: http://www.comprog.ru/Java/article_3080. htm — Апплеты и сервлеты.
8. Дубова H. В круге разработки // Открытые системы. № 9. 2003. URL: http://www.osp.ru/ os/2003/09/183379/.
9. URL: http://hightech.in.ua/content/art-netbeans-ide — NetBeans IDE — универсальная интегрированная среда разработки приложений.
10. URL: http://www.javaportal.ru/java/ide/intro_eclipse. html — Введение в интегрированную среду разработки Eclipse.
11. URL: http://www.pcmag.ru/encyclopedia/term. php?ID=4669 — Определение: WYSIWYG.
12. URL: http://www.opennet.ru/docs/RUS/gtk_plus/ x178.html — Теория Сигналов и Обратных вызовов.
13. URL: http://www.qtinfo.ru/signalsandslots — Сигналы и Слоты.
14. URL: http://symmetrica.net/qt4/qml1.htm — Qt и QML — разные языки для движка и интерфейса.