【发布时间】:2015-05-13 18:21:26
【问题描述】:
我的模型是 C++,前端是 QML。该模型由一个包含其他组件的接口类组成。简化形式(概念验证阶段) 这个接口类是纯虚拟类,称为Base,它派生自QObject。我有一个从Base 派生的Derived 类
当数据发生变化时,我在派生类中发出信号。我的问题是如何在 QML 中捕捉到这个信号和过程?
derived.obj:-1: error: LNK2019: unresolved external symbol "public: void __thiscall Derived::somethingChanged(void)" (?somethingChanged@Derived@@QAEXXZ) referenced in function "public: virtual void __thiscall Derived::doSomething(void)" (?doSomething@Derived@@UAEXXZ)
我的 Base.h 类是:
#include <QObject>
class Base : public QObject
{
Q_OBJECT
public:
explicit Base(QObject *parent = 0);
~Base();
virtual void doSomething() = 0;
signals:
public slots:
};
Derived.h 是
#include "base.h"
class Derived : public Base
{
Q_OBJECT
public:
Derived();
~Derived();
virtual void doSomething();
signals:
void somethingChanged();
};
Derived.cpp 是
#include "derived.h"
#include <QDebug>
Derived::Derived()
{
}
Derived::~Derived()
{
}
void Derived::doSomething()
{
qDebug() << "doSomething() called in Derived";
emit somethingChanged(); // this doesn't compile!
}
Connections {
target: What? // what should I put here,
onSomethingChanged: console.log("The application data changed!")
}
同样的问题是我为target 属性添加了什么?该模型只会将接口类公开给 qml,即Base 类,但信号实际上是在派生类中发出的。信号是否也应该是虚拟的?我应该如何在 QML 中接收这个信号?
【问题讨论】:
-
您将 Derived 实例作为目标。 (另外你忘记了 Derived 的 Q_OBJECT 宏)
-
@FrankOsterfeld 但是派生类是模型的内部部分,它没有直接暴露,但也许我需要暴露它?