我的主要目标是在* .qml文件中定义QML组件时接收来自singleton对象的信号。
假设我在C ++代码中定义了一个单例对象,如下所示:
class MySingleton : public QObject
{
Q_OBJECT
Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged)
typedef QObject Base;
public:
static MySingleton* instance();
const QString& value() const;
void setValue(const QString& value);
signals:
void valueChanged();
private:
MySingleton(QObject* parent = nullptr);
QString m_value;
};
在MySingleton.cpp中:
MySingleton* MySingleton::instance()
{
static MySingleton* obj = new MySingleton();
return obj;
}
const QString& MySingleton::value() const
{
return m_value;
}
void MySingleton::setValue(const QString& value)
{
if (value != m_value) {
m_value = value;
emit valueChanged();
}
}
MySingleton::MySingleton(QObject* parent)
: Base(parent),
m_value("SomeInitialValue")
{
}
单身人士已成功注册QML引擎:
QObject *getMySingleton(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
return MySingleton::instance();
}
void qmlRegisterMySingleton()
{
qmlRegisterSingletonType<MySingleton>("MySingleton", 1, 0, "MySingleton", &getMySingleton);
}
int main(int argc, const char** argv)
{
...
qmlRegisterMySingleton();
...
}
现在,我尝试使用来自单身人士的信号。在“.qml”文件中的某处:
import QtQuick 2.1
import MySingleton 1.0
Rectangle {
id: someRectangle
property string singletonValue : MySingleton.value
MySingleton.onValueChanged: {
consol.log("Value changed")
}
}
使用此语法,我收到包含“MySingleton.onValueChanged:”的行的“不存在的附加对象”错误。请注意,对“ singletonValue ”属性的分配是成功的。
我还尝试将语法更改为以下内容:
import QtQuick 2.1
import MySingleton 1.0
Rectangle {
id: someRectangle
property string singletonValue : MySingleton.value
MySingleton {
onValueChanged: {
consol.log("Value changed")
}
}
}
错误消息是“元素不可创建”,这是预期的。
我的问题是:
答案 0 :(得分:9)
试试这个:
Connections {
target: MySingleton
onValueChanged: {
console.log("Value changed")
}
}
另外
onValueChanged:
中输错了 - QML中没有consol
个对象