2016-05-24 10 views
4

QMLQtを学習しており、enum classqmlに渡すときに問題が発生します。QMLにenumクラスを渡すには?

私は信号をintのパラメータで使用していますが、それは問題なく、完全に機能します。

しかし、とここでトラブル、私はいくつかのenum classパラメータで信号を使用する場合、私はQMLのシグナルハンドラでundefined値を持っています。 enum classからqmlRegisterTypeまで登録しようとしましたが、動作しません。私は助けに感謝します。ここで

コード:

Helperクラスのいくつか

class Helper : public QObject 
{ 
    Q_OBJECT 
    Q_ENUMS(Requester) 
    Q_ENUMS(JANSWER) 

public: 

enum class Requester { 
    ReqLogin, 
    ReqNull, 
    ReqSave, 
    ReqError, 
    ReqUnknown 
}; 

enum class JANSWER { 
    OK, 
    Complete, 
    Error, 
    Unknown 
}; 

}; 

main.cppに

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    qmlRegisterType<JsonPackWorker>("com.jsonpackworker", 1, 0, "JsonPackWorker"); 
    qmlRegisterType<Helper>("com.Helper", 1, 0, "Helper"); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

    return app.exec(); 
} 

JsonPackWorker.h

class JsonPackWorker : public QObject 
{ 
    Q_OBJECT 
public: 
    <...> 

signals:  
    <...> 
    void sendAnswer(Helper::Requester req, Helper::JANSWER answer); 

public slots: 
    <...> 
}; 

Somewehere main.qml

<...> 
import com.jsonpackworker 1.0 
import com.Helper 1.0 

ApplicationWindow { 
    id: mainWindow 

    // Requests in answers 
    property int reqLogin: Helper.ReqLogin 

    <...> 

    JsonPackWorker { 
     id: packWorker 
     <...> 
     onSendAnswer: { 
      // Here I've got undefined undefined if there enum class parameters 
      console.log(req + " " + answer) 
      switch(req) { 
      case reqLogin: loginDial.checkLogin(answer) 
       break; 
      default: 
      } 
     } 
    } 

} 
+0

※どのように動作しませんか?ビルドエラーが出ますか?実行時にクラッシュしますか?予想外の結果ですか?他に何か?詳しく教えてください。あなたがまだそれをしていない場合は、[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)をご覧ください。 –

+0

'enum class'を' enum'に変更すると動作しますか? – coyotte508

+0

@ Joachim Pileborg、私はハンドラに未定義の値があると書いています。コードは 'console.log()'を表示します。ここではその説明にコメントを付けました。 – someoneinthebox

答えて

3

問題

emit sendAnswer(Helper::Requester::ReqNull, Helper::JANSWER::OK); 

JsonPackWorker.cppでは、(Qtのコミュニティのおかげで)Helperクラスにありました。

class Helper { 
    ... 
}; 
Q_DECLARE_METATYPE(Helper::Requester) 
Q_DECLARE_METATYPE(Helper::JANSWER) 
関連する問題