2015-10-16 1 views
0

У меня есть базовый класс, из которого я получаю. Этот базовый класс (BaseClass) является чистым классом C++ (не получается из QObject) и реализует методы, которые я хотел бы предоставить моему QML-интерфейсу без изменений.Любой способ избежать ручной упаковки методов базового класса для их маркировки Q_INVOKABLE?

Предположим, что базовый класс реализует метод bool foobar(). В моем производном классе (DerivedClass) я теперь обернуть их так:

DerivedClass.h:

class DerivedClass : public QObject, public Singleton<Phone>, public BaseClass { 
    Q_OBJECT 
    public: 
    Q_INVOKABLE bool qt_foobar(); 

DerivedClass.cpp:

bool DerivedClass::qt_foobar() { 
    return DerivedClass::instance().foobar(); 

Это отлично работает, но мне интересно, есть ли более элегантный способ просто передать или объявить соответствующие методы как Q_INVOKABLE без этой упаковки и переименования.

ответ

1

Вы можете по крайней мере, избежать различных имен вызова реализации BaseCass в явном виде (as explained here) и сделать это непосредственно в заголовке:

class DerivedClass : public QObject, public Singleton<Phone>, public BaseClass 
{ 
    Q_OBJECT 

    public: 
     Q_INVOKABLE bool foobar() { return BaseClass::foobar() }; 

Я никогда не сталкивался с таким образом, чтобы зарегистрировать invokable методы в МПЦ, кроме Q_INVOKABLE перед подписью в заголовке.