Основные типы QML
QML поддерживает ряд основных типов.
Основной тип — это тип, который ссылается на простое значение, например, int или string. Это в отличие от типов объектов QML, которые ссылаются на объект со свойствами, сигналами, методами и так далее. В отличие от типа объекта, основной тип не может быть использован для объявления объектов QML: например, невозможно объявить объект int{} или объект size{}.
Основные типы могут быть использованы для ссылки на:
- Единое значение (например, int ссылается на одно число, var может ссылаться на один список элементов)
- Значение, содержащее простой набор пар «свойство—значение» (например, size ссылается на значение с атрибутами
widthиheight)
Когда переменная или свойство содержит основной тип и присваивается другой переменной или свойству, создаётся копия значения. В JavaScript это значение называется примитивным значением.
Поддерживаемые основные типы
Некоторые основные типы поддерживаются движком по умолчанию и не требуют заявления импорта, в то время как другие требуют, чтобы клиент импортировал модуль, который их предоставляет. Все основные типы, перечисленные ниже, могут быть использованы как тип property в документе QML, за исключением следующих:
-
listдолжен использоваться совместно с типом объекта QML -
enumerationне может быть использован напрямую, так как перечисление должно быть определено зарегистрированным типом объекта QML
Основные типы, предоставляемые языком QML
Основные типы, которые поддерживаются напрямую в языке QML, перечислены ниже:
Двоичное значение истинно/ложно |
|
Число с десятичной точкой, хранящееся с двойной точностью |
|
Именованное значение перечисления |
|
Целое число, например, 0, 10 или -20 |
|
Список объектов QML |
|
Число с десятичной точкой |
|
Текстовая строка произвольной формы |
|
Указатель на ресурс |
|
Общий тип свойства |
Основные типы, предоставляемые модулями QML
Модули QML могут расширять язык QML с помощью дополнительных основных типов. Например, основные типы, предоставляемые модулем QtQuick перечислены ниже:
Значение даты |
|
Значение с атрибутами x и y |
|
Значение с атрибутами x, y, ширина и высота |
|
Значение с атрибутами ширина и высота |
|
Глобальный объект Qt предоставляет полезные функции для работы со значениями основных типов.
В настоящее время только модули QML, предоставляемые Qt, могут предоставлять свои собственные основные типы, но это может измениться в будущих выпусках Qt QML. Для использования типов, предоставляемых конкретным модулем QML, клиенты должны импортировать этот модуль в свои документы QML.
Поведение изменения свойства для основных типов
Некоторые основные типы имеют свойства: например, тип font имеет свойства pixelSize, family и bold. В отличие от свойств типов объектов, свойства основных типов не предоставляют своих собственных сигналов изменения свойства. Можно создать обработчик сигнала изменения свойства только для самого свойства основного типа:
Text {
// invalid!
onFont.pixelSizeChanged: doSomething()
// also invalid!
font {
onPixelSizeChanged: doSomething()
}
// but this is ok
onFontChanged: doSomething()
} Однако обратите внимание, что сигнал изменения свойства для основного типа генерируется всякий раз, когда изменяется любой из его атрибутов, а также при изменении самого свойства. Например, рассмотрим следующий код:
Text {
onFontChanged: console.log("font changed")
Text { id: otherText }
focus: true
// changing any of the font attributes, or reassigning the property
// to a different font value, will invoke the onFontChanged handler
Keys.onDigit1Pressed: font.pixelSize += 1
Keys.onDigit2Pressed: font.b = !font.b
Keys.onDigit3Pressed: font = otherText.font
} В отличие от этого, свойства типа объекта генерируют свои собственные сигналы изменения свойства, и обработчик сигнала изменения свойства для свойства типа объекта вызывается только при повторном присваивании свойства другому значению объекта.
См. также Систему типов QML.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qtqml-typesystem-basictypes.html