Zen
Zen

Reputation: 5530

How to create a property binding in Qt/C++?

In QML, it's easy write create a property binding, such as:

Rectangle {
    width: parent.width
} 

Is it possible to do this in C++ too?

Upvotes: 7

Views: 6651

Answers (2)

vpicaver
vpicaver

Reputation: 1801

In Qt6 you can use QProperty to achieve c++ property bindings.

Check out this blog post: https://www.qt.io/blog/property-bindings-in-qt-6

They're slightly different than QML binding since they execute lazily. QML binding execute eagerly on every signal. Under the hood QProperty uses thread local storage (TLS) to keep track of dependancies while executing value(). It's definitely an interesting piece of technology and adds a declarative programming paradigm to c++.

Upvotes: 2

Felipe Lema
Felipe Lema

Reputation: 2718

In Qt, some QObjects have certain properties that can be "bound" using signals and slots:

auto *someWidget = QPushButton(/* ... */);
auto *otherRelatedWidget = QLabel( /* ... */ );
// windowTitle is a property for both QWidgets
QObject::connect(someWidget, &QWidget::windowTitleChanged,
                 otherRelatedWidget, &QWidget::setWindowTitle);

Apart from this, you can still connect other signals and slots, even if they're not associated to properties.

I've got to point out that there is no syntax sugar for doing this. See the properties documentation for more info.

Upvotes: 7

Related Questions