Skip to main content

Expressions in Slint

Introduction​

Expressions allow you to declare relationships and connect properties in your user interface.
When properties used in an expression change, the expression is automatically re-evaluated and the property is updated.

Example:

export component Example {
// Declare a property of type int
in-out property<int> my-property;

// Bind width to the property
width: root.my-property * 20px;
}

When my-property changes, the width changes automatically.

Arithmetic Operators​

Arithmetic in expressions works like most programming languages, using *, +, -, /.

export component Example {
in-out property<int> p: 1 * 2 + 3 * 4; // same as (1 * 2) + (3 * 4)
}

String Concatenation​

Concatenate strings using +.

Logical and Comparison Operators​

  • Logical: && (and), || (or)
  • Comparison: ==, !=, >, <, >=, <=

Accessing Properties of Elements​

Use elementName.propertyName syntax.

export component Example {
foo := Rectangle {
x: 42px;
}
x: foo.x;
}

Ternary Operator​

Slint supports the ternary operator condition ? value1 : value2.

Example:

export component Example inherits Window {
preferred-width: 100px;
preferred-height: 100px;

Rectangle {
touch := TouchArea {}
background: touch.pressed ? #111 : #eee;
border-width: 5px;
border-color: !touch.enabled ? #888
: touch.pressed ? #aaa
: #555;
}
}

Statements in Expressions​

Assignment​

clicked => { some-property = 42; }

Self-assignment​

clicked => { some-property += 42; }

Calling a Callback​

clicked => { root.some-callback(); }

Conditional Statements​

clicked => {
if (condition) {
foo = 42;
} else if (other-condition) {
bar = 28;
} else {
foo = 4;
}
}

Empty Expression​

clicked => { }
// or
clicked => { ; }