Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
QML Qt / Qml / 5_Богатства QML на службе приложения Qt.doc
Скачиваний:
114
Добавлен:
28.03.2016
Размер:
760.83 Кб
Скачать

Последние штрихи

Последнее, что мы сделаем для того, чтобы наш виджет выглядел, как любой другой виджет Qt – удалим белый фон, заботливо созданный для нас объектом QDeclarativeView (не забывайте, что это потомок QGraphicsView). Мы сделаем это так:

qmlView->setBackgroundRole(QPalette::Background);

Поскольку наш виджет только показывает значения, но не позволяет их вводить, нам следует добавить в окно программы еще один виджет, предназначенный для управления виджетом QML. Как и в исходном примере программы QML, мы воспользуемся для этого ползунком, только в нашем случае это будет объект класса QSlider. Наш виджет будет реагировать на сигнал sliderChanged() этого объекта. Можно было бы добавить в класс Dial слот и связать этот слот с сигналом sliderChanged() напрямую, я оставляю вам это в качестве домашнего задания.

В следующий раз мы, наконец, рассмотрим программу на чистом QML (для выполнения которой все равно нужна утилита Qt).

Исходные тексты программ

Самостоятельные программы на qml

Содержание

Самостоятельная программа на QML не так уж сильно отличается от модулей QML, используемых в приложениях Qt. Фактически одно почти всегда без особого труда можно конвертировать в другое.

Самостоятельная программа на QML не так уж сильно отличается от модулей QML, используемых в приложениях Qt. Фактически одно почти всегда без особого труда можно конвертировать в другое. Одно из существенных отличий – файл с расширением .qmlproject. Само расширение говорит о том, что задача этого файла – описание проекта QML. Внутри файл описания проекта представляет собой типичный файл модуля, написанного на QML. Рассмотрим пример файла .qmlproject (напомню, что примеры из этой серии статей работают в Qt 4.7.1 и более поздних версиях).

import QmlProject 1.0

Project {

/* Include .qml, .js, and image files from current directory and subdirectories */

QmlFiles {

directory: "."

}

JavaScriptFiles {

directory: "."

}

ImageFiles {

directory: "."

}

/* List of plugin directories passed to QML runtime */

// importPaths: [ " ../exampleplugin " ]

}

Структура файла qmlproject похожа на структуру модуля QML, хотя модулем QML он, строго говоря, не является. Как и практически любой файл QML, файл описания проекта начинается с директивы import. Файл описания проекта импортирует пакет QmlProject, с обязательным, как и во всех подобных случаях, указанием версии – 1.0. Дальше следует ключевое слово Project, за которым, в фигурных скобках следует сам модуль. Семантически это очень похоже на то, как если бы в QML был элемент «Project{}», подобно элементу Rectangle{} или MouseArea{}. Но в официальном перечне элементов QML такой элемент не упомянут, поэтому я воздержусь от того, чтобы называть его элементом. Вообще официальной документации по файлу описания проекта на момент написания этой статьи было как-то подозрительно мало. Вероятно, эта часть QML еще будет меняться в следующих версиях. На самом деле файл qmlproject и не является обязательным для запуска программы QML. Файлы описания проекта требуются, прежде всего, программе Qt Creator, которая черпает из этих файлов информацию о проекте. Qt Creator умеет выполнять синтаксический анализ файлов QML, находить в них ошибки, давать подсказки и даже выполнять автоматическое завершение идентификаторов, все как в C++.

Контекстная справка по QML работает так же хорошо, как и справка по Qt (только в связи с быстрыми изменениями языка, написанное в ней не всегда отражает реальность). При запуске программы QML на выполнение из Qt Creator вызывается утилита qmviewer. Писать программы QML в Qt Creator очень удобно, но если вы не хотите сталкиваться с неприятными сюрпризами, скачайте версию Qt Creator, которая заточена под ту версию QML, с которой вы собираетесь работать. На момент написания этой статьи новейшая версия Qt Creator имела номер 2.1. Эта версия может работать с QML из Qt 4.7.1 и 4.7.2.

Вернемся к файлу qmlproject. Имена структур QmlFiles{}, JavaScriptFiles{} и ImageFiles{} говорят сами за себя. У каждой из этих структур есть свойство directory, которое позволяет указать директорию, в которой хранятся файлы QML, JavaScript, и графики соответственно. В нашем примере все эти файлы хранятся в той же директории, что и файл описания проекта. Свойство importPaths, вероятно, должно хранить списки директорий, из которых программа загружает расширения, хотя для каждого конкретного расширения в каждом модуле, который его загружает, можно указать ту же информацию.

Более того, если у нас есть директория, которая содержит файлы JavaScript, QML и графические файлы, составляющие некий вспомогательный модуль программы, мы можем указать в главном модуле QML имя этой директории (в кавычках, после ключевого слова import) и система QML сама найдет все, что нужно.