Базовые типы QML

Добавлено11 мая 2022 в 07:24

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
}

Свойства объектного типа, наоборот, генерируют свои собственные сигналы об изменении, а обработчик сигнала изменения свойства для свойства объектного типа вызывается только тогда, когда свойству присваивается значение другого объекта.

Теги

GUI / Графический интерфейс пользователяQMLQtQtQuickПрограммированиеТипы данных