有什么方法可以避免手动包装基类的方法来标记它们Q_INVOKABLE?

时间:2015-10-16 22:54:08

标签: c++ qt qml

我有一个我派生的基类。该基类(BaseClass)是一个纯c ++类(不是从QObject派生)并实现了方法,我想在不改变的情况下提供给我的QML接口。

假设基类实现了方法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 个答案:

答案 0 :(得分:1)

您可以通过明确调用BaseCass的实现(as explained here)来避免使用不同的名称,并直接在标题中执行此操作:

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

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

我从来没有遇到过在标题中的签名前面向MOC注册可调用方法而不是Q_INVOKABLE的方法。