Базовые типы 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ПрограммированиеТипы данных

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.