Базовые типы QML
QML поддерживает ряд базовых типов.
Базовый тип – это тип, который ссылается на простое значение, такое как int
или string
. Это контрастирует с типами объектов QML, которые относятся к объекту со свойствами, сигналами, методами и так далее. В отличие от типа объекта, базовый тип нельзя использовать для объявления объектов QML: невозможно, например, объявить объект int{}
или объект size{}
.
Базовые типы могут использоваться для обозначения:
- одного значения (например,
int
относится к одному числу,var
может относиться к одному списку элементов) - значения, содержащего простой набор пар "свойство-значение" (например,
size
относится к значению с атрибутамиwidth
иheight
).
Когда переменная или свойство имеют базовый тип и присваиваются другой переменной или свойству, создается копия значения. В JavaScript это значение называется примитивным значением.
Поддерживаемые базовые типы
Некоторые базовые типы поддерживаются движком по умолчанию и не требуют использования оператора импорта, в то время как другие требуют, чтобы клиент импортировал модуль, который их предоставляет. Все базовые типы, перечисленные ниже, могут использоваться в качестве типа свойства в документе QML со следующими исключениями:
list
(список) должен использоваться в сочетании с типом объекта QML;enumeration
(перечисление) нельзя использовать напрямую, так как перечисление должно быть определено зарегистрированным типом объекта QML.
Базовые типы, предоставляемые языком QML
Базовые типы, изначально поддерживаемые в языке QML, перечислены ниже:
bool | Двоичное значение true /false |
double | Число с десятичной запятой, сохраненное с двойной точностью |
enumeration | Именованное значение перечисления |
int | Целое число, например. 0, 10 или -20 |
list | Список объектов QML |
real | Число с десятичной запятой |
string | Текстовая строка произвольной формы |
url | Определитель положения ресурса |
var | Обобщенный тип свойства |
Базовые типы, предоставляемые модулями QML
Модули QML могут расширять язык QML дополнительными базовыми типами. Например, базовые типы, предоставляемые модулем QtQuick, перечислены ниже:
color | |
date | Значение даты |
font | |
matrix4x4 | |
point | Значение с атрибутами x и y |
quaternion | |
rect | Значение с атрибутами x, y, ширины и высоты |
size | Значение с атрибутами ширины и высоты |
vector2d | |
vector3d | |
vector4d |
Глобальный объект Qt предоставляет полезные функции для управления значениями базовых типов.
В настоящее время только модули QML, предоставляемые Qt, могут предоставлять свои собственные базовые типы, однако это может измениться в будущих версиях Qt QML. Чтобы использовать типы, предоставляемые определенным модулем QML, клиенты должны импортировать этот модуль в свои документы QML.
Поведение при изменении свойства для базовых типов
Некоторые базовые типы имеют свойства: например, тип font
имеет свойства pixelSize
, family
и bold
. В отличие от свойств типов объектов, свойства базовых типов не предоставляют собственных сигналов об изменении. Создать обработчик сигнала изменения свойства можно только для самого свойства базового типа:
Text {
// недопустимо!
onFont.pixelSizeChanged: doSomething()
// тоже недопустимо!
font {
onPixelSizeChanged: doSomething()
}
// а это нормально
onFontChanged: doSomething()
}
Однако имейте в виду, что сигнал изменения свойства для базового типа выдается всякий раз, когда изменяется любой из его атрибутов, а также когда изменяется само свойство. Возьмем, к примеру, следующий код:
Text {
onFontChanged: console.log("font changed")
Text { id: otherText }
focus: true
// изменение любого из атрибутов font или присваивание свойству
// другого значения font вызовет обработчик onFontChanged
Keys.onDigit1Pressed: font.pixelSize += 1
Keys.onDigit2Pressed: font.b = !font.b
Keys.onDigit3Pressed: font = otherText.font
}
Свойства объектного типа, наоборот, генерируют свои собственные сигналы об изменении, а обработчик сигнала изменения свойства для свойства объектного типа вызывается только тогда, когда свойству присваивается значение другого объекта.