2

次のクラスを検討してください。

class foo : public QObject {
  Q_OBJECT 
  Q_ENUMS(E)
  Q_PROPERTY(E x READ x WRITE setx)

  public:
    enum E {
      a = 0,
      b = 1,
      c = 2
    };
}

foo f; 
f->setProperty("x", 2); 

マッピングされた列挙値を setx に提供しません。

この機能を有効にする方法はありますか?

4

1 に答える 1

3

実際の get メソッドと set メソッドはまだ必要です。

class Foo : public QObject {
  Q_OBJECT
  Q_ENUMS(E)
  Q_PROPERTY(E x READ x WRITE set_x)

  public:
    enum E {
      a = 0,
      b = 1,
      c = 2
    };

    E x() const { return x_; }
    void set_x(E value) { x_ = value; }

private:
    E x_;
};

これで動作します:

int main (int argc, char **argv) {
  QCoreApplication app(argc, argv);

  Foo f;

  f.setProperty("x", Foo::c);
  std::cout << f.property("x").toInt() << std::endl;  // 2

  f.setProperty("x", 0);  // Foo:a will also work
  std::cout << f.property("x").toInt() << std::endl; // 0
}
于 2012-09-26T18:59:18.927 に答える