簡體   English   中英

將C ++類暴露給QML

[英]expose C++ class to QML

我有這個代碼。

class Pet
{
  public:
   Pet(const QString& nm)
    : name(nm)
   {}

   const QString& name() const { return nm; }

   private:
    QString nm;
}

class Dog : public QObject, public Pet
{
    Q_OBJECT
  public:
    Dog(QObject* prnt)
     : QBject(prnt),
       Pet("Tommy")
    {}
}

將此暴露給QML

QQmlApplicationEngine engine;
engine.rootContext()->setProperty("petDog", new Dog(&engine));

// QML項目

console.log(petDog.name()) // TypeError: Property 'name' of object Dog(0x0XXXXX) is not a function

將C ++類的所有方法公開給QML的解決方案是什么? 謝謝

這些方法必須是元對象系統已知的,以便可以從QML調用。 這意味着方法必須是:

  1. 信號( Q_SIGNAL ),或
  2. 插槽( Q_SLOT ),或
  3. 可調用( Q_INVOKABLE )。

在Qt 5中,插槽和可調用方法之間的區別僅在於在迭代其元對象數據時是否將該方法列在插槽中。 除此之外,插槽和可調用方法是等效的。

在Qt 5中,即使不是插槽/調用方式,也可以從C ++ connect到任何方法,但是此類方法僅C ++編譯器知道, 而不是QML知道

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM