C++ 如何在Qt/C++;?

C++ 如何在Qt/C++;?,c++,qt,qml,C++,Qt,Qml,在QML中,创建属性绑定很容易,例如: Rectangle { width: parent.width } 在C++中也有可能做到这一点吗? 在Qt中,一些QObjects具有某些可以使用信号和插槽“绑定”的属性: auto *someWidget = QPushButton(/* ... */); auto *otherRelatedWidget = QLabel( /* ... */ ); // windowTitle is a property for both QWidget

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

Rectangle {
    width: parent.width
} 

在C++中也有可能做到这一点吗? 在Qt中,一些
QObject
s具有某些可以使用信号和插槽“绑定”的属性:

auto *someWidget = QPushButton(/* ... */);
auto *otherRelatedWidget = QLabel( /* ... */ );
// windowTitle is a property for both QWidgets
QObject::connect(someWidget, &QWidget::windowTitleChanged,
                 otherRelatedWidget, &QWidget::setWindowTitle);
除此之外,您仍然可以连接其他信号和插槽,即使它们与属性无关


我必须指出,这样做没有语法上的甜点。在QT6中,可以使用QFalk实现C++属性绑定。 查看此博客帖子:


它们与QML绑定稍有不同,因为它们执行起来很慢。QML绑定在每一个信号上都急切地执行。在引擎盖下,QProperty在执行value()时使用线程本地存储(TLS)来跟踪相关性。这绝对是一个有趣的技术,并向C++添加了一个声明式编程范例。

没有C++ API直接做它,你必须从父的WistHchange信号进行连接,以将宽度设置为父宽度。