【发布时间】:2019-08-31 15:13:54
【问题描述】:
我想用 C++ 重新实现以下 QML 组件 (MyComp.qml):
QtObject {
property bool a: true
property bool b: false
// default: binding to a && b
property bool derived: a && b
}
看起来像这样:
class MyComp : public QObject
{
Q_OBJECT
public:
explicit MyComp(QObject *parent = nullptr);
Q_PROPERTY(bool a MEMBER a_ NOTIFY aChanged)
Q_PROPERTY(bool b MEMBER b_ NOTIFY bChanged)
Q_PROPERTY(bool derived MEMBER derived_ NOTIFY derivedChanged)
signals:
void aChanged();
void bChanged();
void derivedChanged();
private:
bool a_ {true};
bool b_ {false};
// I want to set up a default binding derived = a && b that is
// overridable, just like in the QML component; probably in
// the impl. of the default ctor
bool derived_ {true};
}
这有效,除了derived 的评论中描述的内容。
IE。在 QML 中,以下实例应该都可以工作:
MyComp {
id: default_behavior
// should use default a && b binding for derived
}
MyComp {
id: fixed_value
derived: false
}
MyComp {
id: bind_to_other
derived: a && b && some.other.value
}
【问题讨论】:
-
你有什么问题?
-
当你说,“C++ 的翻译是直截了当的”.. 怎么样.. ?你尝试了什么?
-
试图澄清一下。我想以编程方式为 MyComp 设置默认绑定,就像我在 QML 组件中使用 "property bool derived: a && b"""
-
你是说 default_behavior 不像你想要的那样工作,但是 fixed_value 和 bind_to_other 却能像你想要的那样工作?
-
default_behavior 无法工作,因为我不知道如何以编程方式在 C++ 中创建从派生到“a && b”的绑定,就像我在 QML 中使用“property bool derived: a && b”行一样(作为默认的预配置绑定)。