如何在Qt / C ++中创建属性绑定?

时间:2015-09-29 11:19:45

标签: c++ qt qml

在QML中,很容易编写创建属性绑定,例如:

Rectangle {
    width: parent.width
} 

是否可以在C ++中执行此操作?

2 个答案:

答案 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 ++添加了声明性编程范例。

相关问题