2017-10-06 3 views
1

Qt에서 "디자인/구현"문제가 있습니다. 지금은 똑똑한 디자인인지 잘 모르겠다. 그건 내 첫 번째 게시물이고 어디서부터 시작해야할지 모르겠다. ...QML의 costum 클래스에서 Q_PROPERTY를 사용하십시오.

그래서 나는이 방법을 시도 할 것이다. .. 순간 를 나는 이런 식으로 뭔가를 가지고 :

단지 "이름"부동산보다 훨씬 더있을 것입니다 결국 "MyClass에"원인에 내가 가지고 싶은 "NewProperty"클래스의
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; 
}; 

. .. NewProject.cpp 파일은 현재 매우 기본입니다 ...

또한 프로젝트에 여러 개의 MyClasses가 있습니다.

내 "MyClass"끝에는 여러 개의 "NewProperty"요소가 포함될 것입니다 ... 그러나 QM에 "NewProperty"를/오른쪽/좋은 방법으로 전달하는 방법을 모르겠습니다. 나는 이런 식으로 뭔가하려고 노력 :

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)); 
... 

나는 QML 파일에서이 같은 전화를하려고하면 :

import NewProperty 1.0 

Rectangle { 
    id: emailStart 

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

I만을 받기를 메시지 : TypeError : 정의되지 않은 'name'속성을 읽을 수 없습니다.

감사합니다. ...

관련,

모에

스택 오버플로

답변

1

에 오신 것을 환영합니다 도움이 또는 더 나은 코딩을위한 힌트.

Qt 속성을 그렇게 사용할 수 있다고 생각하지 않습니다. QML의 속성에 액세스하려면 클래스 (QObject 기반) 멤버를 Q_PROPERTY으로 정의해야 Qt의 메타 객체 시스템에 노출 될 수 있습니다. 그래서 당신은 단순히 그 안에 속성을 가진 또 다른 클래스를 사용할 수 없습니다.

본질적으로 속성을 중첩 한 객체가 있으므로 QML에서 사용하려는 경우 해당 객체에 플래그를 지정해야합니다. 쉬운 솔루션은 getter 및 setter가 필요하지 않을 경우 회원 키워드를 사용하는 것입니다

Q_PROPERTY(NewProperty prop1 MEMBER prop1) 
NewProperty prop1; 
당신이 아니라 그런 식으로 사용하려는 경우 당신은 여전히 ​​메타 시스템에 사용자 정의 NewProperty 클래스를 노출해야 할 수도 있습니다

재산. 사용자 정의 유형에 대한 자세한 내용은 Creating Custom Qt Types을 참조하십시오.

+0

정말 고마워요. 내 주말을 구 했어요. 나는 문서의 MEMBER 가치를 완전히 간과했다. 매우 도움이된다. – mBucks