2018年3月21日

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 のプロパティーです。

参考情報

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。