Базовые типы 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
}
Свойства объектного типа, наоборот, генерируют свои собственные сигналы об изменении, а обработчик сигнала изменения свойства для свойства объектного типа вызывается только тогда, когда свойству присваивается значение другого объекта.