2018年3月28日

Instantiator

モジュール

QtQml 2.1

クラス継承

QQmlInstantiator → QObject

プロパティー

active: bool = true
asynchronous: bool = false
count: int = 0 readonly
delegate: Component = null default
model: QVariant = 1
object: QtObject = null readonly

シグナル

objectAdded(int index, QtObject object)
objectRemoved(int index, QtObject object)
activeChanged()
asynchronousChanged()
countChanged()
delegateChanged()
modelChanged()
objectChanged()

メソッド

QtObject objectAt(int index)

説明


delegate に設定されたコンポーネントのオブジェクトを生成する。コンポーネントはビジュアルと非ビジュアルのどちらでもよい。

生成オブジェクトの親 QObject は Instantiator になる。ビジュアルオブジェクトを生成したときにはその parent は null になる。
active.qml:

import QtQuick 2.10
import QtQuick.Window 2.10

Window {
    id: window

    visible: true

    width: 300; height: 300

    Instantiator {
        id: generator

        model: [ "red", "green", "blue", "yellow", "purple" ]
        active: false

        Rectangle {
            x: 25 + index*width; y: x
            width: 50; height: width

            color: modelData

            Component.onCompleted: {
                print("ctor", this, this.color);
            }

            Component.onDestruction: {
                print("dtor", this, this.color);
            }
        }

        onObjectAdded: {
            object.parent = window.contentItem;
        }
    }

    MouseArea {
        anchors.fill: parent

        onClicked: {
            generator.active = !generator.active;
        }
    }
}
オブジェクト追加時に parent を設定して表示されるようにしている。この設定をしないと表示されない。実行すると以下のようになり、active の切り替えでオブジェクトの生成と破壊がされているのがわかる。
qml: ctor QQuickRectangle(0x7fed5de5a300) #ff0000
qml: ctor QQuickRectangle(0x7fed5de5d540) #008000
qml: ctor QQuickRectangle(0x7fed5de5e3e0) #0000ff
qml: ctor QQuickRectangle(0x7fed5de5f280) #ffff00
qml: ctor QQuickRectangle(0x7fed5de60120) #800080
qml: dtor QQuickRectangle(0x7fed5de5a300) #ff0000
qml: dtor QQuickRectangle(0x7fed5de5d540) #008000
qml: dtor QQuickRectangle(0x7fed5de5e3e0) #0000ff
qml: dtor QQuickRectangle(0x7fed5de5f280) #ffff00
qml: dtor QQuickRectangle(0x7fed5de60120) #800080

プロパティーの説明

active: bool

true のときに delegate にコンポーネントが設定されていて status が Component.Ready ならばモデルに対してオブジェクトを生成する。false ならばオブジェクトは生成せず、生成オブジェクトがあれば破壊する。

asynchronous: bool

true ならば非同期にオブジェクトを生成する。

count: int

生成し抱えているオブジェクト数。

delegate: Component

オブジェクト生成に使われるコンポーネント。

生成オブジェクトには読込み専用プロパティー index に生成順が設定される。model が、整数、配列、文字列リスト、オブジェクトリストの場合には読込み専用プロパティー modelData に要素 (整数の場合には生成順) が設定される。

model: QVariant

以下のいずれかを設定する。整数を指定した場合にはその数分のオブジェクトが生成され、他の場合には各要素に対してオブジェクトが生成される。
  • 整数
  • 配列
  • 文字列リスト
  • オブジェクトリスト
  • ObjectModel や ListModel、QAbstractItemModel 継承モデルなど
配列を設定した場合に model を参照すると配列への参照が返される。

配列を設定し、同じ配列を再設定した場合でもオブジェクトの削除と生成がされる。

object: QtObject

生成したオブジェクトがあれば 1 番目に生成したオブジェクトへの参照が設定される。オブジェクトをひとつしか生成しない場合にオブジェクトの参照を簡単にするために用意されている。

シグナルの説明

objectAdded(int index, QtObject object)

オブジェクトが追加されたときに送信されるシグナル。index は追加位置で object は追加されたオブジェクト。

objectRemoved(int index, QtObject object)

オブジェクトを削除しようとするときに送信されるシグナル。index は削除位置で object は削除しようとするオブジェクト。シグナルハンドラー onObjectRemoved() を抜けた直後にオブジェクトが削除される。

active を false にしたときには objectRemoved() の中では count は生成して抱えたオブジェクト数のままで、全オブジェクトの削除後に count が 0 になる。

メソッドの説明

QtObject objectAt(int index)

index で指定した位置のオブジェクトへの参照を返す。

注意


model を参照したときの動作が Repeater の model とは異なっている。

参考情報

Instantiator QML Type
Repeater

大域関数

モジュール

QtQml 2.3

関数

string QT_TRANSLATE_NOOP(string context, string sourceText, string disambiguation)
string QT_TRID_NOOP(string id)
string QT_TR_NOOP(string sourceText, string disambiguation)
string qsTr(string sourceText, string disambiguation, int n)
string qsTrId(string id, int n)
string qsTranslate(string context, string sourceText, string disambiguation, int n)
gc()
print(...) 

説明


プリフィックスなしで直接呼び出せる大域関数。

関数の説明

string QT_TRANSLATE_NOOP(string context, string sourceText, string disambiguation)

string QT_TRID_NOOP(string id)

string QT_TR_NOOP(string sourceText, string disambiguation)

string qsTr(string sourceText, string disambiguation, int n)

string qsTrId(string id, int n)

string qsTranslate(string context, string sourceText, string disambiguation, int n)

gc()

ガーベージコレクションを作動する。

print(...)

console.log() と同一。

参考情報

utils.js

共通 JavaScript 変数と関数


utils.js:

.pragma library

const trolltechGreen = Qt.rgba(141/255, 192/255, 48/255)
const trolltechPurple = Qt.rgba(131/255, 124/255, 172/255)

const buttonTextColor = Qt.rgba(0.0, 0.47843137254902, 1.0, 1.0)

function colorName(color) {
    const tos = Object.prototype.toString;

    function formatElement(e) {
        return ("00" + Math.round(255*e).toString(16)).slice(-2);
    }

    const typeString = tos.call(color);
    const typeName = typeString.match(/[a-z]+/gi)[1];
    if (typeName === "String") {
        return "";
    }

    const r = formatElement(color.r);
    const g = formatElement(color.g);
    const b = formatElement(color.b);
    const a = formatElement(color.a);

    return "#%1%2%3%4".arg(a).arg(r).arg(g).arg(b);
}

const monoFont = function() {
    if (Qt.platform.os == "linux") {
        return Qt.font({ family: "DejaVuSansMono" });
    } else if (Qt.platform.os == "windows") {
        return Qt.font({ family: "Lucida Console" });
    } else if (Qt.platform.os == "osx") {
        return Qt.font({ family: "Osaka", styleName: "Regular-Mono" });
    } else {
        return Qt.font({ family: "Lucida Console" });
    }
}();

function grayFor(color) {
    return ((255 * color.r * 11 + 255 * color.g * 16 + 255 * color.b * 5) / 32) / 255;
}

function textColorFor(aBackgroundColor) {
    return grayFor(aBackgroundColor) > 0.5 ? "black" : "white";
}

function randomNumberBetween(first, last) {
    return first + Math.floor(Math.random() * (last - first + 1));
}

function classNameOf(object) {
    return object.toString().replace(/\(.*$/, "");
}

var qtVersionNumber = function() {
    const component = Qt.application.version.split(".");
    return Number(component[0]+ ("0" + component[1]).substring(-2) + ("0" + component[2]).substring(-2));
}();

function dumpObjectTree(object) {
    function traverse(object, level) {
        if (!object.children) {
            return;
        }

        for (var index in object.children) {
            var line = "";
            for (var _ = 0; _ < level; ++_) {
                line += "    ";
            }
            const child = object.children[index];
            line += classNameOf(child);
            if (child.objectName) {
                line += " (%1)".arg(child.objectName);
            }
            print(line)
            traverse(child, level + 1);
        }
    }

    traverse(object, 0);
}

説明


変数の説明

trolltechGreen

Trolltech の緑色。

trolltechPurple

Trolltech の紫色。

buttonTextColor

ボタンテキスト色。

monoFont

各プラットフォームでの代表的な固定幅フォント名。

qtVersionNumber

Qt のバージョンナンバーを MNNPP 形式の整数で保持する。Qt 5.8.1 ならば 50801、Qt 5.9 ならば 50900。

関数の説明

String colorName(color color)

色名のアルファ値を省略せずに常に #aarrggbb 形式の文字列で返す。

Number grayFor(color color)

指定された色をグレイ化する。Qt C++ の qGray() と同じ。

String textColorFor(color aBackgroundColor)

指定された背景色に対してはっきり見えるテキスト色を "white" か "black" で返す。

Number randomNumberBetween(int first, int last)

first を下限、last を上限として乱数を返す。

String classNameOf(QObject object)

QML オブジェクトの C++ クラス名を返す。

dumpObjectTree(object)

ビジュアルツリー構造を表示する。

2018年3月27日

Component

モジュール

QtQml 2.0

クラス継承

QQmlComponent → QObject

プロパティー

progress: real = 1 readonly
status: Status = Component.Null readonly
url: url = ComponentURL readonly

シグナル

statusChanged(Component::Status)
progressChanged(real) 

アタッチトシグナル

completed()
destruction()

メソッド

void createObject(QtObject parent, Object properties)
string errorString()
void incubateObject(Item parent = null, Object properties = {}, Qt.Asynchromous|Qt.Synchronous = Qt.Asynchronous)

スロット

void loadUrl(url url)
void loadUrl(url url, CompilationMode mode)
void setData(QByteArray, url baseUrl)

列挙

CompilationMode
    PreferSynchronous
    Asynchronous
Status
    Null
    Ready
    Loading
    Error

説明


プロパティーの説明

progress: real

status: Status

url: url

シグナルの説明

statusChanged(Component::Status)

progressChanged(real) 

アタッチトシグナルの説明

completed()

destruction()

メソッドの説明

void createObject(QtObject parent, Object properties)

string errorString()

void incubateObject(Item parent, Object properties, Qt.Asynchromous|Qt.Synchronous)

第 3 引数に Qt.Asynchronous を指定すると QQmlInclubator の mode に QQmlIncubator::AsynchronousIfNested を渡してインスタンスが生成される。Qt.Asynchronous あるいはこれら以外を指定すると QQmlIncubator::Synchronous が渡される。

Qt.Synchronous と Qt.Asynchronous は Qt オブジェクトの定数で列挙値ではない。

スロットの説明

void loadUrl(url url)

void loadUrl(url url, CompilationMode mode)

void setData(QByteArray, url baseUrl)

注意


Component のリファレンスは説明が少な過ぎる。QQmlComponent のリファレンスも見なければならない。

参考情報

Component QML Type
QQmlComponent Class

2018年3月26日

tint.qml

tint.qml:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12

Window {
    visible: true

    minimumWidth: topLayout.implicitWidth
    minimumHeight: topLayout.implicitHeight

    color: "white"

    ColumnLayout {
        id: topLayout

        anchors.fill: parent

        spacing: 14

        Item { height: 8 }

        RowLayout {
            Layout.leftMargin: 20
            Layout.rightMargin: 20

            spacing: 20

            ColorSampler {
                id: baseColor

                Layout.fillWidth: true
                Layout.fillHeight: true
                Layout.alignment: Qt.AlignCenter

                name: "base"
                color: "#f0ffff00"
            }

            ColorSampler {
                id: tintColor

                Layout.fillWidth: true
                Layout.fillHeight: true
                Layout.alignment: Qt.AlignCenter

                name: "tint"
                color: Qt.rgba(0.5, 1.0, 1.0, tintAlphaSlider.value)
            }

            ColorSampler {
                id: resultColor

                Layout.fillWidth: true
                Layout.fillHeight: true
                Layout.alignment: Qt.AlignCenter

                name: "result"
                color: Qt.tint(baseColor.color, tintColor.color)
            }
        }

        Slider {
            id: tintAlphaSlider

            Layout.fillWidth: true
            Layout.leftMargin: 40
            Layout.rightMargin: 40

            value: 0.4
        }

        Item { height: 8 }
    }
}

ColorSampler.qml:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12
import "utils.js" as Utils

Item {
    id: root

    property string name
    property alias color: colorRect.color

    implicitWidth: 100
    implicitHeight: 100

    Rectangle {
        id: colorRect

        anchors.fill: parent

        border.color: "darkgrey"
        radius: 4

        Text {
            anchors.verticalCenter: parent.verticalCenter

            leftPadding: 14
            text: `${name}: \n${Utils.colorName(parent.color)}`
        }
    }
}

スライダーでアルファ値を変化させると色合いがどのように付くかがわかる。

tint.qml の実行結果

参照コード

Qt

モジュール

QtQml 2.3

プロパティー

application: QtObject = QQuickApplication()
inputMethod: QtObject = QInputMethod()
platform: QtObject = QQmlPlatform()
styleHints: QtObject = QStyleHints()

関数

string atob(Object encodedData)
QQmlBindingFunction binding(FunctionObject function)
string btoa(Object data)
void callLater(FunctionObject function, argument1, argument2, ...)
void callLater(FunctionObject function)
bool colorEqual(color|string lhs, color|string rhs)
Component createComponent(string url, Component.CompilationMode mode, Object parent)
QtObject createQmlObject(string qml, Object parent, string filepath)
color darker(color|string baseColor, real factor)
void exit(int retCode)
font font(Object fontSpecifier)
QmlSequence<string> fontFamilies()
string formatDate(datetime date, string|Number format)
string formatDateTime(datetime dateTime, string|Number format)
string formatTime(datetime time, string|Number format)
color hsla(double hue, double saturation, double lightness, double alpha)
color hsva(double hue, double saturation, double value, double alpha)
Object include(string url, FunctionObject callback)
bool isQtObject(Object object)
color lighter(color|string baseColor, real factor)
Locale locale(string name)
Matrix4x4 matrix4x4(real m11, real m12, real m13, real m14, real m21, real m22, real m23, real m24, real m31, real m32, real m33, real m34, real m41, real m42, real m43, real m44)
Matrix4x4 matrix4x4(Object jsarray)
string md5(data)
bool openUrlExternally(url target)
point point(double x, double y)
quaternion quaternion(real scalar, real x, real y, real z)
void quit()
rect rect(double x, double y, double width, double height)
url resolvedUrl(url url)
color rgba(double red, double green, double blue, double alpha = 1.0)
size size(double width, double height)
color tint(color|string baseColor, color|string tintColor)
vector2d vector2d(float x, float y)
vector3d vector3d(float x, float y, float z)
vector4d vector4d(float x, float y, float z, float w)

列挙

省略

説明


Qt は大域オブジェクトで、プロパティー、関数、列挙、定数が定義されている。Qt プリフィックスを付けて Qt.rgba(141/255, 192/255, 48/255) のようにして使う。参考情報のリファレンスにはプリフィックスを付けないものも混ざっていて別に分けた。

プロパティーの説明

application: QtObject

参照すると QQuickApplication のインスタンスが返る。

inputMethod: QtObject

参照すると QInputMethod のインスタンスが返る。

platform: QtObject

参照すると QQmlPlatform のインスタンスが返る。

styleHints: QtOject

参照すると QStyleHints のインスタンスが返る。

以降のプロパティーがある。
cursorFlashTime: int = 1000 readonly final
カーソル点滅間隔。
fontSmoothingGamma: real = 2 readonly constant final
keyboardAutoRepeatRate:  int = 30 readonly constant final
keyboardInputInterval: int = 400 readonly final
mouseQuickSelectionThreshold: int = 10 final
mouseDoubleClickInterval: int = 400 readonly final
mousePressAndHoldInterval: int = 800 readonly final
passwordMaskCharacter: QChar = • readonly constant final
passwordMaskDelay: int = 0 readonly final
setFocusOnTouchRelease: bool = false readonly constant final
showIsFullScreen: bool = false readonly constant final
showIsMaximized: bool = false readlonly constant final
showShortcutsInContextMenus: bool = false readonly constant final
singleClickActivation: bool = false readonly constant final
startDragDistance: int = 10 readonly constant final
ドラグ開始移動量。
startDragTime: int = 500 readonly final
startDragVelocity: int = 0 readonly constant final
tabFocusBehavior: Qt::TabFocusBehavior = Qt::TabFocusAllControls readonly final
useHoverEffects: bool = true final
useRtlExtensions: bool = false readonly constant final
wheelScrollLines: int = 3 readonly final
以降の通知シグナルがあり、connect() は利用できるがシグナルハンドラーを利用できるようになっていない。

void cursorFlashTimeChanged(int cursorFlashTime)
void keyboardInputIntervalChanged(int keyboardInputInterval)
void mouseDoubleClickIntervalChanged(int mouseDoubleClickInterval)
void mousePressAndHoldIntervalChanged(int mousePressAndHoldInterval)
void mouseQuickSelectionThresholdChanged(int threshold)
void startDragDistanceChanged(int startDragDistance)
void startDragTimeChanged(int startDragTime)
void tabFocusBehaviorChanged(Qt::TabFocusBehavior tabFocusBehavior)
void useHoverEffectsChanged(bool useHoverEffects)
void wheelScrollLinesChanged(int scrollLines)

関数の説明


JavaScript 関数として実装されている。リファレンスに記載されている戻り値や仮引数の型通りに扱われているとは限らない。型が間違っているものもある。実際の扱いに合わせて記述している。

string atob(Object encodedData)

encodedData に対して toString() を呼び出し、その Latin1 バイト列を Base64 でデコードした文字列を返す。
atob.qml:

import QtQml 2.8

QtObject {
    property var array: [1, 2, 3]

    Component.onCompleted: {
        var data;
        var encoded;

        data = "123";
        encoded = Qt.btoa(data);
        print(data, encoded);
        console.assert(data.toString() == Qt.atob(encoded));

        data = 123;
        encoded = Qt.btoa(data);
        print(data, encoded);
        console.assert(data.toString() == Qt.atob(encoded));

        data = array;
        encoded = Qt.btoa(array);
        print(data, encoded);
        console.assert(data.toString() == Qt.atob(encoded));

        Qt.quit();
    }
}
実行結果は以下のようになる。
$ qml atob.qml
qml: 123 MTIz
qml: 123 MTIz
qml: [1,2,3] MSwyLDM=
$

QQmlBindingFunction binding(FunctionObject function)

string btoa(Object data)

data に対して toString() を呼び出し、その UTF-8 バイト列を Base64 でエンコードした文字列を返す。

void callLater(FunctionObject function, argument1, argument2, ...)

void callLater(FunctionObject function)

bool colorEqual(color|string lhs, color|string rhs)

Component createComponent(string url, Component.CompilationMode mode, Object parent)

QtObject createQmlObject(string qml, Object parent, string filepath)

color darker(color|string baseColor, real factor)

void exit(int retCode)

font font(Object fontSpecifier)

QmlSequence<string> fontFamilies()

string formatDate(datetime date, string|Number format)

string formatDateTime(datetime dateTime, string|Number format)

string formatTime(datetime time, string|Number format)

color hsla(double hue, double saturation, double lightness, double alpha)

color hsva(double hue, double saturation, double value, double alpha)

Object include(string url, FunctionObject callback)

bool isQtObject(Object object)

object が QtObject を継承したオブジェクトならば true を返し、それ以外の場合には false を返す。
isqtobject.qml:

import QtQuick 2.10

QtObject {
    property var qtObject: QtObject {}
    property var rectangle: Rectangle {}
    property var jsObject: Object({ family: "Times", pointSize: 24 })

    function func() {}

    Component.onCompleted: {
        print("qtObject:", Qt.isQtObject(qtObject));
        print("rectangle:", Qt.isQtObject(rectangle));
        print("jsObject:", Qt.isQtObject(jsObject));
        print("Qt.font(jsObject):", Qt.isQtObject(Qt.font(jsObject)));
        print("func:", Qt.isQtObject(func));

        Qt.quit();
    }
}
実行結果は以下のようになる。
$ qml isqtobject.qml
qml: qtObject: true
qml: rectangle: true
qml: jsObject: false
qml: Qt.font(jsObject): false
qml: func: false
$

color lighter(color|string baseColor, real factor)

Locale locale(string name)

Matrix4x4 matrix4x4(real m11, real m12, real m13, real m14, real m21, real m22, real m23, real m24, real m31, real m32, real m33, real m34, real m41, real m42, real m43, real m44)

Matrix4x4 matrix4x4(Object jsarray)

string md5(data)

bool openUrlExternally(url target)

point point(int x, int y)

quaternion quaternion(real scalar, real x, real y, real z)

void quit()

rect rect(int x,  int y, int width, int height)

url resolvedUrl(url url)

color rgba(double red, double green, double blue, double alpha)

size size(int width, int height)

color tint(color|string baseColor, color|string tintColor)

以下のように tintColor のアルファ値 a を tintColor と baseColor に乗じて色合いを付ける。
r' = a*tintColor.r + (1 - a)*baseColor.r
g' = a*tintColor.g + (1 - a)*baseColor.g
b' = a*tintColor.b + (1 - a)*baseColor.b
a' = a + (1 - a)*baseColor.a
サンプルコード tint.qml を参照。

vector2d vector2d(real x, real y)

vector3d vector3d(real x, real y, real z)

vector4d vector4d(real x, real  y, real z, real w)

列挙の説明


多くの列挙がある。列挙値の総数は Qt 5.10 で 1099、Qt 5.11 で 1131、Qt 5.12 で 1132。ただし Qt.red などのように QML では使えないものも含まれる。

注意


用意されている 4 つのプロパティーに代入できるがエラーにはならず、プロパティーを参照すると同一インスタンスが返る。

新たにプロパティーや JavaScript 関数を定義してグローバルに使えてしまう。

問題


関数はリファレンスに記載されている戻り値や仮引数の型通りに扱われているとは限らず型が間違っているものもある。上記の説明では実際の扱いに合わせている。例えば、 Qt.point()、Qt.size()、Qt.rect() の仮引数の型が int とリファレンスに書かれているが実際には double になっている。

QStyleHints のリファレンスにプロパティーは読み込み専用と書かれているが useHoverEffects と mouseQuickSelectionThreshold  は読み書き可能になっている。

参考情報のリファレンスに以下の関数が書かれているが存在しない。
qsTrIdNoOp()
qsTrNoOp()
qsTranslateNoOp()
それぞれ以下の関数が正しい。また、これらの大域関数は Qt プリフィックスを付けないで使う。
QT_TRID_NOOP()
QT_TR_NOOP()
QT_TRANSLATE_NOOP()
リファレンスに以下の関数が書かれている。これらの大域関数は Qt プリフィックスを付けないで使う。
qsTr()
qsTrId()
qsTranslate()

参考情報

Qt QML Type

2018年3月25日

コンポーネントスコープ

説明


サブコンポーネントを除くコンポーネントのすべてのオブジェクトの id とそのルートオブジェクトのプロパティーとメソッド (シグナル、JavaScript 関数) をコンポーネントスコープと定義する。このとき参照関係は以下のようになる。
  • コンポーネントスコープ内のものはファイル内で参照可能
  • 親系列コンポーネントのコンポーネントスコープ内のものは参照可能
  • 上記のいずれでもないものは参照不可
サブコンポーネントとは以下のものを指す。
  • Repeater や Instantiator、ListView のデリゲートやヘッダー、フッターなどに設定されたコンポーネント
  • Component で定義されるインラインコンポーネント
また、以下の制約と可視性がある。
  • コンポーネントスコープ内の id は重複不可。
  • コンポーネントスコープ内の id がコンポーネントスコープ内のプロパティーまたはメソッドと重複した場合は id 優先
  • コンポーネントスコープは、サブコンポーネントからは親系列コンポーネントのコンポーネントスコープになる
親系列コンポーネント内のものを参照するのは、全般的な情報への参照か依存関係が単純かつ密結合な場合に限るようにする。汎用コンポーネントを作成するには親への依存性は持たせないようにし、プロパティーを用意して振舞いを指定する。

Connections

モジュール

QtQml 2.3

クラス継承

QQuickLoader → QObject

プロパティー

target: QtObject = parent
enabled: bool = true
ignoreUnknownSignals: bool = false

シグナル

enabledChanged()
targetChanged()

説明


プロパティーの説明

target: QtObject

enabled: bool

ignoreUnknownSignals: bool

参考情報

Connections QML Type

Loader

モジュール

QtQuick 2.0

クラス継承

QQuickLoader → QQuickImplicitSizeItem (internal) → QQuickItem (FocusScope) → QObject

プロパティー

active: bool = true
asynchronous: bool = false
item: QtObject = null readonly
progress: real = 0 readonly
source: url = ""
sourceComponent: Component = null
status: Status = Loader.Null readonly

implicitWidth: real = 0 readonly override
implicitHeight: real = 0 readonly override

シグナル

loaded()

activeChanged()
asynchronousChanged()
itemChanged()
progressChanged()
sourceChanged()
sourceComponentChanged()
statusChanged()

void implicitWidthChanged()
void implicitHeightChanged()

メソッド

void setSource(QQmlV4Function*)

列挙

Status
        Null
        Ready
        Loading
        Error

説明


プロパティーの説明

active: bool

asynchronous: bool

item: QtObject

progress: real

source: QUrl

sourceComponent: Component

status: Status


implicitWidth: real

implicitHeight: real


シグナルの説明

loaded()

このシグナルが送信された時点では、まだレイアウトができる状態にはなっていない。

implicitWidthChanged()

implicitHeightChanged()


メソッドの説明

void setSource(QQmlV4Function*)


問題


Loader のリファレンスに sourceComponent を undefined を設定してアンロードすると書かれているが、undefined を設定すると null になる。また、sourceComponent のデフォルト値は null になっている。

レイアウト内で用いたときに Layout.fillWidth と Layout.fillHeight の片方だけを指定すると指定しない方の幅または高さが 0 になってしまう。

参考情報

2018年3月23日

FocusScope

モジュール

QtQuick 2.0

クラス継承

QQuickFocusScope → QQuickItem (FocusScope) → QObject

説明


主にコンポーネント化時に使われ、子オブジェクトのアクティブフォーカスを制御する。つまり、最後にアクティブフォーカスが与えられた子オブジェクトを覚え、フォーカスが与えられたときに最後にアクティブフォーカスが与えられた子オブジェクトにアクティブフォーカスを与える。

実際の動作は以降のようになる。FocusScope 内のオブジェクトで最後に focus が true になったものを覚える。FocusScope 外の他のオブジェクトの activeFocus が true になるとフォーカスが移動して FocusScope の focus と activeFocus はfalse になる。このとき FocusScope 内の最後に focus が true になったオブジェクトの focus は true のままを維持する。そして FocusScope の focusを true に設定するか forceActiveFocus() を呼び出すと、FocusScope 内で最後に focus が true になったオブジェクトの activeFocus を true にする。

FocusScope は Item を継承し Flag::ItemIsFocusScope フラグを立てただけである。このフラグは QML 側から操作できない。以下のタイプもこのフラグが設定されていて FocusScope と同じ動作をする。
Frame
GridView
GroupBox
ListView
Loader
Page
Pane
PathView
RangeSlider
ScrollView
SpinBox
StackView
SwipeView
TabBar
ToolBar

問題


リファレンス Keyboard Focus in Qt Quick の説明は間違いが多く、FocusScope の動作を適確に説明していないので、そのまま信用してはならない。

参考情報

Binding

モジュール

QtQml 2.8

クラス継承

QQmlBind → QObject

プロパティー

delayed: bool = false
property: string = ""
target: QtObject = null
value: var = undefined
when: bool = false

説明


QML にエクスポートされた C++ オブジェクトのプロパティーや Loader でインスタンス化されたオブジェクトのプロパティーにバインディングをする場合に用いる。

when に条件を指定すると true のときにのみバインディングを適用できる。

プロパティーの説明

delayed: bool

true に設定するとイベントループが空になったときにバインディングが実行される。

property: string

バインディング対象のプロパティーの名前を指定する。グループプロパティーの指定も可能。

target: QtObject

バインディング対象のプロパティーを持つオブジェクトを指定する。

value: var

バインディングする式を JavaScript で記述する。

when: bool

true の場合に value に記述したバインディングが設定され、false の場合にバインディングを取り除いて元のバインディングに戻す。

参考情報

2018年3月22日

Timer

モジュール

QtQml 2.0

クラス継承

QQmlTimer → QObject

プロパティー

interval: int = 1000
repeat: bool = false
running: bool = false
triggeredOnStart: bool = false

シグナル

void triggered() 
void runningChanged()
void intervalChanged()
void repeatChanged()
void triggeredOnStartChanged()

スロット

void restart()
void start()
void stop()

説明


interval に指定した間隔で triggered() シグナルを送信する。

QTimer とは違ってアニメーションのタイマーと同期している。従ってアニメーションが 60fps ならば Timer の精度は 16 ミリ秒になる。タイマー精度は以下のようにして確認できる。
coretimer.qml:

import QtQml 2.0

QtObject {
    id: root

    property int count: 0
    property int maxCount: 10
    readonly property var timer: Qt.createQmlObject('import QtQml 2.0; Timer { interval: 16; running: false; repeat: true; }', root)

    function fire() {
        count = count + 1;
        if (count >= maxCount) {
            console.timeEnd("time");
            timer.stop();
            Qt.quit();
        }
    }

    Component.onCompleted: {
        timer.triggered.connect(fire);
        if (Qt.application.arguments.length >= 4) {
            timer.interval = Qt.application.arguments[3];
        }
        if (Qt.application.arguments.length >= 5) {
            maxCount = Qt.application.arguments[4];
        }
        console.time("time");
        timer.running = true;
    }
}
実行結果はこのようになる。
$ qml coretimer.qml -- 1 100
time: 141ms
$ qml coretimer.qml -- 2 100
time: 217ms
$ qml coretimer.qml -- 3 100
time: 328ms
$ qml coretimer.qml -- 4 100
time: 425ms
$ qml coretimer.qml -- 5 100
time: 527ms
$ qml coretimer.qml -- 6 100
time: 624ms
$ qml coretimer.qml -- 7 100
time: 717ms
$ qml coretimer.qml -- 8 100
time: 826ms
$ qml coretimer.qml -- 9 100
time: 915ms
$ qml coretimer.qml -- 10 100
time: 1016ms
$

プロパティーが変更されると一旦停止し最初から動作を開始する。

プロパティーの説明

interval: int

triggered() シグナルの送信間隔をミリ秒で指定する。

repeat: bool

true に設定すると interval に指定した間隔で triggered() シグナルを繰り返し送信する。false に設定すると interval に指定した間隔後に triggered() シグナルを一度だけ送信する。

running: bool

動作中は true で停止中は false、逆に値を設定して動作と停止を切り替えられる。

triggeredOnStart: bool

true に設定すると動作開始時に triggered() シグナルを呼び出す。repeat が false の場合には開始時と interval で指定した間隔後の計 2 回 triggered() シグナルが送信される。

スロットの説明

void restart()

動作を再開し running が true になる。停止中ならば動作を再開し、動作中ならば一旦停止し最初から動作を開始する。

void start()

動作を開始し running が true になる。動作中ならばそのまま動作を続ける。

void stop()

動作を停止し running が false になる。停止中ならばそのままで何もしない。

参考情報

2018年3月21日

QtObject

モジュール

QtQml 2.0

クラス継承

QObject

プロパティー

objectName: string = null

シグナル

objectNameChanged(string objectName)

メソッド

void destroy(int delay = 0)

説明


QObject を QML で扱えるようにしたタイプ。非ビジュアル QML タイプのベースタイプとして使われ、オブジェクトアトリビュートを記述してカプセル化にも使える。

以下のシグナルとスロットは QML からはアクセスできないようにしている。
void destroyed(QtObject)
void destroyed()
void deleteLater()

プロパティーの説明

objectName: string

QObject の objectName プロパティー。

メソッドの説明

void destroy(int delay)

delay が 0 の場合には QObject::deleteLater() を呼び出し、0 でない場合にはシングルショットタイマーで delay で指定したミリ秒後に QObject::deleteLater() を呼び出す。

問題


QtObject のリファレンスには destroy() が記載されていない。しかしサンプルコードやテストケースで使われている。

参考情報

索引

詳説 Qt Quick

  • はじめに
基礎
  • QML
  • Qt Quick
  • QML の構文
  • 外部 JavaScript ファイル
  • オブジェクトアトリビュート
    • id アトリビュート
    • プロパティーアトリビュート
    • シグナルアトリビュート
    • シグナルハンドラーアトリビュート
    • メソッドアトリビュート
    • アタッチトプロパティーアトリビュート
    • アタッチトシグナルハンドラーアトリビュート
    • 列挙アトリビュート
  • タイプ
    • QML 基本タイプ
    • QML オブジェクトタイプ
    • QML ビジュアルタイプ
    • QObject と QtObject
    • 親オブジェクトとビジュアル親オブジェクト
    • QML ビジュアルタイプの重ね合わせ
    • ウィンドウ
  • シグナル
    • シグナルハンドラー
  • プロパティー
    • プロパティー変更通知シグナル
    • プロパティーバインディング
    • 遅延プロパティー
  • 整列
    • アンカー
    • ビュー
    • デリゲート
    • ポジショナー
    • レイアウト
    • リピーター
    • インスタンシエーター
  • ユーザ操作
    • キー操作
      • フォーカスとアクティブフォーカス
    • マウス操作
    • マルチタッチ操作
    • ジェスチャー操作
    • ドラグ&ドロップ操作
  • カスタム QML タイプ
    • コンポーネント
      • ファイルコンポーネント
      • インラインコンポーネント
    • カスタムプロパティー
    • デフォルトプロパティー
    • 別名プロパティー
    • カスタムシグナル
    • フォーカススコープ
      • アクティブフォーカスプロクシー
    • コンポーネントスコープ
    • JavaScript スコープ
  • アニメーション
    • 基本的なアニメーション
    • ステートとトランジション
    • イージング曲線
    • 特化したアニメーション
    • アニメーションのグループ化
      • 直列アニメーション
      • 並列アニメーション
      • グループ化で併用するタイプ
    • シグナルハンドラーとアニメーション
      • デフォルトメソッド
  • モデルビュー
    • モデルビューの考え方
    • モデル
    • ビュー
    • デリゲート
  • 動的 QML
    • ローダー
QML と C++ の統合
  • QObject オブジェクトシステム
    • QObject
    • オブジェクトの親子関係
    • メタオブジェクト
    • プロパティーシステム
    • シグナルとスロット
    • イベントシステム
      • イベントハンドラー
      • イベントフィルター
      • 合成イベント
  • タイプシステム
  • QVariant
  • データクラス
    • 暗黙の共有
  • コンテナクラス
  • スマートポインター
  • スレッド
  • QML アプリケーション
    • QQmlEngine
    • QQmlContext
    • QQmlComponent
    • QQmlIncubator
    • QQuickView
    • QQmlApplicationEngine
  • C++ オブジェクトを QML で使う
  • C++ クラスを QML で使う
  • C++ 列挙を QML で使う
  • C++ プロパティーを QML で使う
  • C++ シグナルを QML で使う
  • C++ スロットとメソッドを QML で呼び出す
  • C++ で QML アタッチトプロパティーを作成
  • QML オブジェクトを C++ で操作参照する
  • C++ モデルビュー
    • モデルビューアーキテクチャー
    • QStringListModel
    • C++ モデルを QML で使う
    • QAbstractListModel
    • QAbstractItemModel
  • C++ で QML ビジュアルタイプを作成
    • ペインター
    • シーングラフ
  • C++ で QML コレクションタイプを作成
  • C++ QML タイプのプラグイン化
拡張機能
  • Qt Quick Test
  • Qt Quick Controls 2
  • キャンバス
  • シェープ
  • シェーダーイフェクト
  • グラフィカルイフェクト
  • パーティクル
  • アニメーター

トピック

サンプルコード

Qt QML リファレンス


QtQml
QtQml.Models
QtQml.StateMachine

Qt Quick リファレンス


QtQuick
  • Accessible
  • Affector
  • Age
  • AnchorAnimation
  • AnchorChanges 編集中
  • anchors 編集中
  • AnimatedImage 編集中
  • AnimatedSprite
  • Animation 編集中
  • AnimationController
  • Animator (Since: Qt 5.2) -
  • Attractor
  • Behavior 編集中
  • BorderImage -
  • BorderImageMesh (Since: Qt 5.8) -
  • Canvas (Since: Qt 5.0)
  • CanvasGradient (Since: Qt 5.0)
  • CanvasImageData
  • CanvasPixelArray
  • CloseEvent (Since: Qt 5.1)
  • ColorAnimation -
  • Column -
  • ConicalGradient (Since: Qt 5.10) -
  • Context2D (Since: Qt 5.0)
  • CumulativeDirection
  • CustomParticle
  • DelegateChooser (Since: Qt 5.12 tech preview, Qt.labs.qmlmodels 1.0)
  • Direction
  • DoubleValidator -
  • Drag -
  • DragEvent -
  • DropArea -
  • Easing 編集中
  • EllipseShape
  • Emitter
  • EnterKey (Since: Qt 5.6)
  • EventPoint
  • EventTouchPoint
  • Flickable -
  • Flipable -
  • Flow 編集中
  • FocusScope 編集中
  • FolderListModel -
  • FontLoader -
  • FontMetrics (Since: Qt 5.4)
  • Friction
  • GestureEvent -
  • Gradient -
  • GradientStop -
  • GraphicsInfo (Since: QtQuick 2.8)
  • Gravity
  • Grid -
  • GridMesh (Since: Qt 5.0) -
  • GridView -
  • GroupGoal
  • Image -
  • ImageParticle
  • IntValidator -
  • Item 編集中
  • ItemGrabResult
  • ItemParticle
  • KeyEvent -
  • KeyNavigation -
  • Keys -
  • LayoutMirroring -
  • LineShape
  • LinearGradient (Since: Qt 5.10)
  • ListView -
  • Loader 編集中
  • MaskShape
  • Matrix4x4
  • MouseArea -
  • MouseEvent -
  • MultiPointTouchArea -
  • NumberAnimation -
  • OpacityAnimator (Since: Qt 5.2) -
  • OpenGLInfo (Since: Qt 5.4)
  • ParallelAnimation
  • ParentAnimation (Since: Qt 5.0) 編集中
  • ParentChange 編集中
  • Package -
  • Particle
  • ParticleGroup
  • ParticlePainter
  • ParticleSystem
  • Path -
  • PathAngleArc -
  • PathAnimation (Since: Qt 5.0) -
  • PathArc -
  • PathAttribute -
  • PathCubic -
  • PathCurve -
  • PathElement -
  • PathInterpolator -
  • PathLine -
  • PathMove -
  • PathPercent -
  • PathQuad -
  • PathSvg -
  • PathView -
  • PauseAnimation -
  • Pinch (private)
  • PinchArea -
  • PinchEvent -
  • PointDirection -
  • PointerEvent
  • Positioner -
  • PropertyAction 編集中
  • PropertyAnimation -
  • PropertyChanges -
  • RadialGradient (Since: Qt 5.10)
  • Rectangle 編集中
  • RectangleShape
  • RegExpValidator -
  • Repeater 編集中
  • Rotation -
  • RotationAnimation -
  • RotationAnimator (Since: Qt 5.2) -
  • Row -
  • Scale -
  • ScaleAnimator (Since: Qt 5.2) -
  • Screen -
  • ScreenInfo
  • ScriptAction 編集中
  • SequentialAnimation
  • Settings -
  • ShaderEffect
  • ShaderEffectSource (Since: Qt 5.0)
  • Shape (Since: Qt 5.10)
  • ShapeGradient (Since: Qt 5.10)
  • ShapePath (Since: Qt 5.10)
  • Shortcut (Since: Qt 5.5)
  • SignalSpy (Since: Qt 4.8)
  • SmoothedAnimation -
  • SpringAnimation -
  • Sprite
  • SpriteGoal
  • SpriteSequence
  • State 編集中
  • State (Since: Qt 5.4) -
  • StateChangeScript
  • StateGroup
  • SystemPalette
  • TableView (Since: Qt 5.12) -
  • TargetDirection
  • TestCase (Since: Qt 4.8)
  • Text 編集中
  • TextEdit 編集中
  • TextInput 編集中
  • TextMetrics (Since: Qt 5.4) 編集中
  • TouchEventSequence (Since: Qt 5.9) -
  • TouchPoint -
  • TrailEmitter
  • Transform -
  • Transition 編集中
  • Translate -
  • Turbulence
  • UniformAnimator (Since: Qt 5.2) -
  • Vector3dAnimation -
  • ViewSection -
  • ViewTransition -
  • VisualDataGroup
  • VisualDataModel
  • VisualItemModel
  • Wander
  • WheelEvent -
  • Window -
  • WorkerScript 編集中
  • XAnimator (Since: Qt 5.2) -
  • XmlListModel -
  • XmlRole -
  • YAnimator (Since: Qt 5.2) -
QtQuick.Dialogs
  • ColorDialog
  • Dialog
  • FileDialog
  • FontDialog
  • MessageDialog
QtQuick.Layouts
QtQuick.LocalStorage

QtQuick.Particles
QtQuick.Shapes

QtQuick.Window

QtQuick.XmListModel

Graphical Effects リファレンス


Blend
  • Blend
Color
  • BrightnessContrast
  • ColorOverlay
  • Colorize
  • Desaturate
  • GammaAdjust
  • HueSaturation
  • LevelAdjust
Gradient
  • ConicalGradient
  • LinearGradient
  • RadialGradient
Distortion
  • Displace
Drop Shadow
  • DropShadow
  • InnerShadow
Blur
  • FastBlur
  • GaussianBlur
  • MaskedBlur
  • RecursiveBlur
  • Motion Blur
  • DirectionalBlur
  • RadialBlur
  • ZoomBlur
Glow
  • Glow
  • RectangularGlow
Mask
  • OpacityMask
  • ThresholdMask

QtQuick


タイプ階層
QQuickPointerHandler
        QQuickPointerDeviceHandler
                QQuickSinglePointHandler
                        HoverHandler
                        PointHandler
                        TapHandler
                QQuickMultiPointHandler
                        DragHandler
                        PinchHandler
  • DragHandler (Since: Qt 5.12) 編集中
  • HoverHandler (Since: Qt 5.12)
  • PinchHandler (Since: Qt 5.12)
  • PointHandler (Since: Qt 5.12)
  • TapHandler (Since: Qt 5.12)
  • QQuickSinglePointHandler (Since: Qt 5.12 internal)
  • QQuickPointerDeviceHandler (Since: Qt 5.12 internal)
  • QQuickMultiPointHandler (Since: Qt 5.12 internal)
  • QQuickPointerHandler (Since: Qt 5.12 internal)

Qt Quick Controls 2 リファレンス

  • Qt Quick Controls 2 の概要
  • スタイルのカスタマイズ
  • AbstractButton (Since: Qt 5.7)
  • Action (Since: Qt 5.10)
  • ActionGroup (Since: Qt 5.10)
  • ApplicationWindow (Since: Qt 5.7) -
  • BusyIndicator (Since: Qt 5.7) -
  • Button (Since: Qt 5.7) -
  • ButtonGroup (Since: Qt 5.7) -
  • CheckBox (Since: Qt 5.7) -
  • CheckDelegate (Since: Qt 5.7) -
  • ComboBox (Since: Qt 5.7) -
  • Container (Since: Qt 5.7) -
  • Control (Since: Qt 5.7) -
  • DelayButton (Since: Qt 5.9) -
  • Dial (Since: Qt 5.7) -
  • Dialog (Since: Qt 5.8) -
  • DialogButtonBox (Since: Qt 5.8) -
  • Drawer (Since: Qt 5.7) -
  • Frame (Since: Qt 5.7) -
  • GroupBox (Since: Qt 5.7) -
  • ItemDelegate (Since: Qt 5.7) -
  • Label (Since: Qt 5.7) -
  • Menu (Since: Qt 5.7) -
  • MenuBar (Since: Qt 5.10) -
  • MenuBarItem (Since: Qt 5.10) -
  • MenuItem (Since: Qt 5.7) -
  • MenuSeparator (Since: Qt 5.8) -
  • Overlay (Since: Qt 5.10) -
  • Page (Since: Qt 5.7) -
  • PageIndicator (Since: Qt 5.7) -
  • Pane (Since: Qt 5.7) -
  • Popup (Since: Qt 5.7) -
  • ProgressBar (Since: Qt 5.7) -
  • RadioButton (Since: Qt 5.7) -
  • RadioDelegate (Since: Qt 5.7) -
  • RangeSlider (Since: Qt 5.7) -
  • RoundButton (Since: Qt 5.8) -
  • ScrollBar (Since: Qt 5.7) -
  • ScrollIndicator (Since: Qt 5.7) -
  • ScrollView (Since: Qt 5.9) -
  • Slider (Since: Qt 5.7) -
  • SpinBox (Since: Qt 5.7) -
  • StackView (Since: Qt 5.7) -
  • SwipeDelegate (Since: Qt 5.7) -
  • SwipeView (Since: Qt 5.7) -
  • Switch (Since: Qt 5.7) -
  • SwitchDelegate (Since: Qt 5.7) -
  • TabBar (Since: Qt 5.7) -
  • TabButton (Since: Qt 5.7) -
  • TextArea (Since: Qt 5.7) -
  • TextField (Since: Qt 5.7) -
  • ToolBar (Since: Qt 5.7) -
  • ToolButton (Since: Qt 5.7) -
  • ToolSeparator (Since: Qt 5.8) -
  • ToolTip (Since: Qt 5.7) -
  • Tumbler (Since: Qt 5.7) -

Rectangle

モジュール

QtQuick 2.0

クラス継承

QQuickRectangle → QQuickItemQObject

プロパティー

color: color = "#ffffffff"
border: QQuickPen* = QQuickPen(this) readonly constant
    color: color = "#ff000000"
    pixelAligned: bool = true
    width: real = 1
gradient: Gradient = null
radius: real = 0

シグナル

void border.penChanged()

void colorChanged()
void radiusChanged()

説明


antialiasing を設定していない場合に radius を 0 以外に設定すると antialiasing が true になり、アンチエイリアスが自動的に有効になります。

border は読み込み専用で通知シグナルはありません。代わりに border.penChanged() シグナルがあり以下のようにして使います。
border.qml:

import QtQuick 2.10
import QtQuick.Window 2.10

Window {
    visible: true

    width: 400; height: 400

    color: "lightgrey"

    Rectangle {
        id: rect

        width: 200; height: 200
        anchors.centerIn: parent

        border {
            color: "black"
            width: 3

            onPenChanged: {
                print("Pen is changed");
            }
        }
        color: "red"
    }

    MouseArea {
        anchors.fill: parent

        onClicked: {
            if (Qt.colorEqual(rect.border.color, "black")) {
                rect.border.color = "green";
            } else {
                rect.border.color = "black";
            }
        }
    }
}

プロパティーの説明

color: color

border: QQuickPen*

border.color: color

border.pixelAligned: bool

border.width: real

縁の幅。border.pixelAligned が true の場合に、小数点以下で四捨五入した整数値が縁の幅になります。これがデフォルト動作です。

gradient: Gradient

radius: real

シグナルの説明

void border.penChanged()

border.color、border.pixelAligned、border.width のいずれかが変更されると送信される通知シグナル。

注意


border.width と border.color のデフォルト値はそれぞれ 1 と黒色ですが明示的に設定しないと縁は描画されません。border.width が 0 かどうかで縁の有無を判定する場合には border のプロパティーに初期値を設定する必要があります。

問題


Rectangle のリファレンスで、border.width の型が int になっているのは間違いで、real が正しい型です。int ならば浮動小数点数を設定すると小数点以下が切り捨てられて渡りますが、実際には浮動小数点数が渡り、内部で小数点以下で四捨五入しています。

Rectangle のリファレンスで、プロパティーに antialiasing が入っていますが、オーバーライドされてないので Rectangle のプロパティーではなく Item のプロパティーです。

参考情報

2018年3月20日

Item

モジュール

QtQuick 2.11

クラス継承

QQuickItem → QObject

プロパティー

activeFocus: bool = false readonly final
activeFocusOnTab: bool = false final
anchors: QQuickAnchors* = QQuickAnchors(this) readonly final
antialiasing: bool = false
children: list<Item> = [] readonly
childrenRect: rect = Qt.rect(0, 0, 0, 0) readonly final
clip: bool = false
containmentMask: QtObject = null
data: list<QtObject> = [] readonly default
enabled: bool = true
focus: bool = false final
height: real = 0 final
implicitHeight: real = 0
implicitWidth: real = 0
layer: QQuickItemLayer* = QQuickItemLayer(this) readonly final
opacity: real = 1 final
parent: Item = null final
resources: list<QtObject> = [] readonly
rotation: real = 0
scale: real = 1
smooth: bool = true
state: string = ""
states: list<State> = [] readonly
transform: list<Transform> = [] readonly final
transitions: Property<Transition> = [] readonly
transformOrigin: TransformOrigin = Item.Center
transformOriginPoint: point = 中心点 readonly
visible: bool = true final
visibleChildren: list<Item> = [] readonly
width: real = 0 final
x: real = 0 final
y: real = 0 final
z: real = 0 final

baseline: QQuickAnchorLine = QQuickAnchors::BaselineAnchor readonly final
baselineOffset: real = 0
bottom: QQuickAnchorLine = QQuickAnchors::BottomAnchor readonly final
horizontalCenter: QQuickAnchorLine = QQuickAnchors::HCenterAnchor readonly final
left: QQuickAnchorLine = QQuickAnchors::LeftAnchor readonly final
right: QQuickAnchorLine = QQuickAnchors::RightAnchor readonly final
top: QQuickAnchorLine = QQuickAnchors::TopAnchor readonly final
verticalCenter: QQuickAnchorLine = QQuickAnchors::VCenterAnchor readonly final

シグナル

windowChanged(QQuickWindow* window)

activeFocusChanged(bool)
activeFocusOnTabChanged(bool)
antialiasingChanged(bool)
baselineOffsetChanged(real)
childrenChanged()
childrenRectChanged(rect)
clipChanged(bool)
containmentMaskChanged()
enabledChanged()
focusChanged(bool)
implicitHeightChanged()
implicitWidthChanged()
opacityChanged()
parentChanged(Item)
rotationChanged()
scaleChanged()
smoothChanged(bool)
stateChanged(string)
transformOriginChanged(TransformOrigin)
visibleChanged()
visibleChildrenChanged()
xChanged()
yChanged()
zChanged()
widthChanged()
heightChanged()

メソッド

Item childAt(real x, real y)
Item nextItemInFocusChain()
Item nextItemInFocusChain(bool forward)
bool contains(point point)
bool grabToImage(QJSValue callback)
bool grabToImage(QJSValue callback, size targetSize)
void forceActiveFocus()
void forceActiveFocus(Qt::FocusReason reason)
void mapFromGlobal(QQmlV4Function*)
void mapFromItem(QQmlV4Function*)
void mapToGlobal(QQmlV4Function*)
void mapToItem(QQmlV4Function*)

スロット

void update()

列挙

TransformOrigin
    TopLeft
    Top
    TopRight
    Left
    Center
    Right
    BottomLeft
    Bottom
    BottomRight

説明


プロパティーの説明

activeFocus: bool

activeFocusOnTab: bool

anchors: QQuickAnchors*

anchors を参照。

antialiasing: bool

children: list<Item>

childrenRect: rect

clip: bool

containmentMask: QtObject

Q_INVOKABLE QObject::contains(const QPoint& point) が実装されたマスクオブジェクトを設定する。Item.contains() で内部判定に用いられる。

MouseArea のマスク を参照。

data: list<QtObject>

enabled: bool

focus: bool

height: real

implicitHeight: real

implicitWidth: real

layer: QQuickItemLayer*

opacity: real

parent: Item

resources: list<QtObject>

rotation: real

scale: real

smooth: bool

state: string

states: list<State>

transform: list<Transform>

transitions: list<Transition>

transformOrigin: TransformOrigin

transformOriginPoint: point

visible: bool

visibleChildren: list<Item>

width: real

x: real

y: real

z: real


baseline: QQuickAnchorLine

baselineOffset: real

bottom: QQuickAnchorLine

horizontalCenter: QQuickAnchorLine

left: QQuickAnchorLine

right: QQuickAnchorLine

top: QQuickAnchorLine

verticalCenter: QQuickAnchorLine

シグナルの説明


メソッドの説明


スロットの説明


列挙の説明


注意


シグナルの仮引数が型のみで仮引数名が省略されているものはシグナルハンドラーで呼び出される処理に実引数が渡されるプロパティーはない。以下のようにすればシグナルの実引数を受け取れる。
smoothChanged.connect(function(arg) { ... });
QML の signal によるシグナル定義では、仮引数名なしの定義はできない。仮引数名のない シグナルは C++ で実装されている。

問題


Item のリファレンスに top、bottom、left、right、horizontalCenter、verticalCenter、baseline、transformOriginPoint の各プロパティー、windowChanged シグナルが記載されていない。

参考情報

Item QML Type

Repeater

モジュール

QtQuick 2.0

クラス継承

QQuickRepeater → QQuickItemQObject

プロパティー

count: int = 0 readonly
delegate: Component = undefined default
model: QVariant = null

シグナル

void itemAdded(int index, Item item)
void itemRemoved(int index, Item item)

void countChanged()
void delegateChanged()
void modelChanged()

メソッド

Item itemAt(int index)

説明


delegate に設定されたビジュアルコンポーネントのオブジェクトを生成する。ビジュアルコンポーネントのみ生成できる。生成オブジェクトの親 QObject は nullptr になり、parent は Repeater の parent になる。生成したオブジェクトは Repeater が抱えていて itemAt() で参照できる。

生成オブジェクトには読込み専用プロパティー index に生成順が設定される。model が、整数、配列、文字列リスト、オブジェクトリストの場合には読込み専用プロパティー modelData に要素 (モデルが整数の場合には生成順) が設定される。

model に配列を設定した場合に、変更した配列を再設定すると全オブジェクトの破壊と再生成がされてしまう。以下のようにして配列にオブジェクトを入れれば、オブジェクトの破壊と生成をせずに配列要素の変更をオブジェクトに伝えられる。

objectlist.qml:

import QtQuick 2.10
import QtQuick.Window 2.10

Window {
    id: window

    visible: true

    width: 200; height: 200

    Component {
        id: numberDelegate

        QtObject {
            property string name: "John Doe"
        }
    }

    function createPerson(parent, name) {
        return numberDelegate.createObject(parent, { "name": name });
    }

    Column {
        Repeater {
            id: repeater
            model: [
                       createPerson(contentItem, "John Doe"),
                       createPerson(contentItem, "John Doe"),
                       createPerson(contentItem, "John Doe")
                   ]

            Text {
                text: "Name is " + modelData.name
                font.pointSize: 16
            }
        }
    }

    MouseArea {
        anchors.fill: parent

        onClicked: {
            repeater.model[1].name = "JOHN SMITH";
        }
    }
}

プロパティーの説明

count: int

delegate: Component

オブジェクト生成に使われるコンポーネント。Component の id または Component を記述する。Component タイプの記述を省略した場合には暗黙のコンポーネントと呼ばれ自動的にコンポーネントにになる。

model: QVariant

以下のいずれかを設定する。整数を指定した場合にはその数分のオブジェクトが生成され、他の場合には各要素に対してオブジェクトが生成される。
  • 整数
  • 配列
  • 文字列リスト
  • オブジェクトリスト
  • ObjectModel や ListModel、QAbstractItemModel 継承モデルなど
配列を設定した場合に model を参照すると配列がコピーされて返される。配列を設定するときにも配列がコピーされる。QML カスタムプロパティーに配列オブジェクトを設定すると JavaScript の配列オブジェクトの扱いと同じように配列オブジェクトの参照が用いられるが、Repeater の model では配列オブジェクトがコピーされ、JavaScript の配列オブジェクトの扱いと異なっている。

配列を設定し、配列を再設定した場合の等価性判定は、配列オブジェクトが同じかどうかではなく、要素数と各要素が同じかどうかで判定される。こちらも JavaScript の配列オブジェクトの等価性判定と異なっている。

model に ObjectModel を設定した場合には delegate は設定しなくてよい。ObjectModel の要素がビジュアルデリゲートになるので、delegate を設定しても無視される。

シグナルの説明

void itemAdded(int index, Item item)

ビジュアルオブジェクトが追加されたときに送信されるシグナル。index は追加位置で item は追加されたビジュアルオブジェクト。

void itemRemoved(int index, Item item)

ビジュアルオブジェクトを削除しようとするときに送信されるシグナル。index は削除位置で item は削除しようとするビジュアルオブジェクト。シグナルハンドラー onItemRemoved() を抜けた直後にビジュアルオブジェクトが削除される。

メソッドの説明

Item itemAt(int index)

注意


ポジショナーやレイアウトとよく併用されるがビジュアルオブジェクトを生成してその parent を設定しているだけなのでこれらと併用せずに使える。

Repeater は Item を継承しているがポジショナーとレイアウトは Repeater を無視するようになっているので Repeater 自身はポジショナーとレイアウトで配置されない。

model に配列オブジェクトを設定参照したときの動作が Instantiator の model とは異なっている。

問題


Repeater のリファレンスに model に配列オブジェクトを設定参照した場合に参照ではなくコピーされることが書かれていない。

参考情報