Qt:5.10新しい特性、QMLで列挙を定義する

2104 ワード

Qtは5.5から始まり、C++で列挙を定義することをサポートします.Q_を採用ENUMキーワードは、QML用にカスタム列挙をメタオブジェクトシステムに登録します.
これ、正直、めんどくさい、めんどくさい、めんどくさい、うん、めんどくさいことを3回言うんだ.
長い間、C++に関わりたくない状況で、私自身がQMLプログラムを開発したのは文字列で列挙していました.例えば「XxxxStyle」です.
この問題は、ついに5.10で解決した.5.10では、QMLで列挙値をカスタマイズできます.
MyRectangle.qml
import QtQuick 2.10

Rectangle {
    id: myRectangle
    width: 100
    height: 100

    color: {
        switch ( currentStyle )
        {
            case MyRectangle.Style.RedStyle: return "#ff0000";
            case MyRectangle.Style.GreenStyle: return "#00ff00";
            case MyRectangle.Style.BlueStyle: return "#0000ff";
            default: return "#00000000";
        }
    }

    enum Style {
        RedStyle,
        GreenStyle,
        BlueStyle
    }

    property int currentStyle: MyRectangle.Style.RedStyle
}

ここでは、RedStyle、GreenStyle、BlueStyleの3つの属性を持つ列挙をカスタマイズしました.列挙値を受信するためにcurrentStyleが同時に存在します.
使用する場合は、現在のQML内でも外部でもQML . . のルールに従って使用します.
最後にこのMyRectangleはこのように使用できます.
MyRectangle {
    currentStyle: MyRectangle.Style.GreenStyle
}

全体的には、以前よりC++で登録し、QMLで使用する方法が多く便利になりました.でも!私はツッコミを入れなければなりません.5.10に持参したQtCreatorがenumキーワードを正しく認識できず、QMLファイル全体が正常にハイライトされません.後のバージョンが改善されるのを待つしかありません.