在QML中,很容易编写创建属性绑定,例如:
Rectangle {
width: parent.width
}
是否可以在C ++中执行此操作?
答案 0 :(得分:5)
在Qt中,有些QObject
具有某些properties,可以使用信号和插槽“绑定”:
auto *someWidget = QPushButton(/* ... */);
auto *otherRelatedWidget = QLabel( /* ... */ );
// windowTitle is a property for both QWidgets
QObject::connect(someWidget, &QWidget::windowTitleChanged,
otherRelatedWidget, &QWidget::setWindowTitle);
除此之外,您仍然可以连接其他信号和插槽,即使它们与属性无关。
我必须指出,这样做没有语法糖。有关详细信息,请参阅properties documentation。
答案 1 :(得分:0)
在Qt6中,您可以使用QProperty实现c ++属性绑定。
查看此博客文章: https://www.qt.io/blog/property-bindings-in-qt-6
它们与QML绑定略有不同,因为它们懒惰地执行。 QML绑定会在每个信号上积极执行。在后台,QProperty使用线程本地存储(TLS)在执行value()时跟踪依赖关系。这绝对是一项有趣的技术,并且为c ++添加了声明性编程范例。