Qtのカスタム属性Q_PROPERTYの使用のいくつかの体得

7403 ワード

QtヘルプドキュメントからQ_を検索PROPERTYでは、次のように表示されます.
 Q_PROPERTY(type name
             (READ getFunction [WRITE setFunction] |
              MEMBER memberName [(READ getFunction | WRITE setFunction)])
             [RESET resetFunction]
             [NOTIFY notifySignal]
             [REVISION int]
             [DESIGNABLE bool]
             [SCRIPTABLE bool]
             [STORED bool]
             [USER bool]
             [CONSTANT]
             [FINAL])

こんなにたくさん見ましたが、実は今まであまり使っていなかったので、よく使われているいくつかと言います.例を挙げます.
Q_PROPERTY(QString title READ title WRITE setTitle)

各プロパティにアクセスできる必要があります.これにより、他の言語のgetメソッドやsetメソッドと同様に定義されます.QStringはタイプ、titleは名前、READ titleは読み方、以下は通常のメンバー関数とメンバー変数を自分で定義する必要があります
QString title()
{
	return m_title;
}

void setTitle(const QString &title)
{
	m_title = title;
}

//      
QString m_title;

これを見てみましょう
 Q_PROPERTY(type name
             (READ getFunction [WRITE setFunction] |
              MEMBER memberName [(READ getFunction | WRITE setFunction)])

これまたは演算子を見ると、これらがオプションであることがわかります.一つのQ_PROPERTY定義属性は読み取り専用であってもよい
 Q_PROPERTY(type name READ getFunction)

読み書き可能な書き方1:
Q_PROPERTY(type name READ getFunction WRITE setFunction)

書き方2:
Q_PROPERTY(type name MEMBER memberName)

書き方3:
Q_PROPERTY(type name MEMBER memberName READ getFunction)

書き方四:
Q_PROPERTY(type name MEMBER memberName WRITE setFunction)

ある人は言います:あなたは孔乙己が茴香豆の“茴”の字にいくつかの書き方があることを聞いたのではありませんか?
実はそうではありません.書き方1と書き方2が最も一般的で、書き方2が最も簡潔で、getとsetの方法をカスタマイズしてくれます.書き方1の柔軟性が最も大きく、getとsetの方法はカスタマイズする必要があります.書き方3と書き方4はgetまたはsetのいずれかでカスタマイズできます.
一つ間違いは同じQを同時に使ったことです.PROPERTYにはREADやWRITE、MEMBERといった書き方が多いです.
実際には、特にqmlでよく使われる[NOTIFY notifySignal]もあります.これは、信号を定義するか、公式のヘルプドキュメントで例を挙げるか(ヘルプディレクトリでThe Property Systemを検索する)を定義する必要があります.
    Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged)
    Q_PROPERTY(qreal spacing MEMBER m_spacing NOTIFY spacingChanged)
    Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)
    ...
signals:
    void colorChanged();
    void spacingChanged();
    void textChanged(const QString &newText);

private:
    QColor  m_color;
    qreal   m_spacing;
    QString m_text;

NOTIFYは,属性が変化したときに,これを1つの信号で送信して通知することを定義している.
もし皆さんが興味があれば、この文章を見て、上の各属性の使い方について説明しました:Qtのカスタム属性Q_PROPERTY
まとめてみると、これまでREAD、WRITE、MEMBER、そしてNOTIFYの使い方を知りました.
これも私が仕事で今使っているもので、「少なければ得、多ければ惑」です.
ここでは、Qtのプロパティアニメーションとシリアルアニメーショングループを組み合わせた最初のフェードアウトの小さな例を示します.
参考:Qtのカスタム属性Q_PROPERTY
QTのQtのQ_PROPERTYマクロの理解
[Qt入門編]5 Qtの属性システム——属性を宣言する
[Qt入門編]6 Qtの属性システム——READ/WRITE/MEMBER
[Qt入門編]7 Qtの属性システム——NOTIFYとRESET