2017-10-06 13 views
1

Qtの "デザイン/実装"の問題が残っています。 現時点では私はスマートなデザインであるかどうかはわかりません... これは私の最初の投稿です。どこから始めるべきかはわかりません...QMLのcostumクラスのQ_PROPERTYを使用してください

だから私はこのようにしていきます。 ... 私はこのような何か持っている瞬間:

class NewProperty : public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(QString name READ name WRITE setName) 
    . 
    . 
    . 

public: 
    NewProperty(const QString &name, QObject *parent = 0); 

    QString name()const; 
    void setName(const QString &name); 
    . 
    . 
    . 
private: 
    QString m_s_name; 
}; 

単に「名前」プロパティよりもはるかに多くがあるでしょう、私は最後に「MyClassの」原因で持ちたい「NewProperty」クラスです。 .. NewProject.cppファイルは現時点でかなり基本的です...

また、プロジェクトにはいくつかのMyClassesもあります。

私の "MyClass"は最後にいくつかの "NewProperty"の要素を持っています... しかし、私は "NewProperty"を/正しい/良い方法でQMLに渡す方法がわかりません。 私はこのような何か実行しようとしました:私はQMLファイルにこのような何かを呼び出そう

class QML_EMail : public Base_Output 
{ 
    Q_OBJECT 
public: 
    NewProperty prop1; 
    NewProperty prop2; 
    . 
    . 
    . 
}; 

main.cppに

... 
qmlRegisterType<NewProperty>  ("NewProperty", 1, 0, "NewProperty"); 
QML_EMail email 
ctx->setContextProperty("email",   QVariant::fromValue(&email)); 
... 

を:

import NewProperty 1.0 

Rectangle { 
    id: emailStart 

Component.onCompleted: 
{ 
    console.log(email.prop1.name) 
} 

私はこれを取得メッセージ:TypeError:未定義の 'name'プロパティを読み取れません

よりよいコーディングのためのヘルプやヒント...

に関して、

萌え

答えて

1

は、スタックオーバーフローへようこそ。

私はQtのプロパティをそのように使うことはできないと思います。 QMLのプロパティにアクセスするには、クラス(QObjectベース)のメンバをQ_PROPERTYで定義し、Qtのメタオブジェクトシステムで公開する必要があります。したがって、そのようなプロパティを持つ別のクラスを単純に使用することはできません。

基本的には、プロパティを持つオブジェクトがネストされているため、QMLで使用する場合は、そのオブジェクトにフラグを設定する必要があります。簡単な解決策は、あなたがゲッターとセッターを必要としない場合MEMBERキーワードを使用することです:

Q_PROPERTY(NewProperty prop1 MEMBER prop1) 
NewProperty prop1; 
あなたにそのようにそれを使用したい場合は、まだメタシステムにカスタム NewPropertyクラスを公開する必要がある場合があります

プロパティ。カスタムタイプの詳細については、Creating Custom Qt Typesを参照してください。

+0

ありがとうございました...私の週末を保存しました。私は完全にドキュメントのメンバー値を見落としました。非常に役立ちます – mBucks

関連する問題