2014-09-22 3 views
2

특정 지점에서 작동하지 않을 수도있는 기능이있는 클래스가 있습니다. 사용자에게 표시 할 수있는 오류 메시지를 생성하고 실패시 false를 반환해야합니다. 이 내가있어 무엇 :Qt/QML에 오류 메시지가 표시됩니다.

class MyManager : public QObject 
{ 
    Q_OBJECT 

public: 

    MyManager(QObject* parent); 

    bool createSomething() { 
     if(foo == false) { 
      qDebug() << "foo can't be false here"; 
      //Error message should be shown to user 
      return false; 
     } 
     //Do stuff 
    } 

는 C++ 쪽은 QML에서 구현 불가지론해야한다. 이 것 한 가지 가능한 방법과 같이, error(const QString& msg) 신호를합니다 :

bool createSomething() { 
    if(foo == false) { 
     qDebug() << "foo can't be false here" 
     emit error("Foo is false"); 
     return false; 
    } 
    //Do stuff 
} 

을 등처럼 표시 QML에 있습니다

Connection { 
    target: manager 
    onError: errorMessageText.text = msg 
} 

하나 또한 구체적 및 신호를 가질 수 creationError(const QString& msg)

이 전체 구현은 잘못되었다고 생각합니다. 구조적으로 더 나은 방법이 있다고 확신합니다. 나는 이것에 대한 통찰력과 아이디어에 만족할 것입니다!

+0

qml에 오류 메시지 만 표시 하시겠습니까? – Nejat

+0

@Nejat 예, 전체 UI는 QML입니다. 사용자는 '텍스트'속성이 '만들기'기능에 전달되는 TextField를 채 웁니다. 실패하면 사용자에게 왜 실패했는지 알려주는 오류 메시지가 표시되어야한다고 생각합니다. – xarxer

+2

나는 당신의 제안 된 접근법에 아무런 문제가 없다고 생각한다. 신호/슬롯 메커니즘을 사용하면 C++와 qml 사이에서 의사 소통이 가능하다. – Nejat

답변

0

나는 그렇게 생각하지 않는다.

어쨌든 예를 들어 이렇게 할 수도 있습니다. C++에서 직접 속성을 QObject::setProperty()으로 설정하거나 QMetaObject::invokeMethod을 통해 변경하는 QML 메서드를 호출하지만 작업 할 QML 객체를 저장하거나 매번 찾을 필요가 있습니다.

관련 문제