Slint Kit Documentation

Layout

Grid for Slint

KitGrid · Slint Kit 0.3.0

Grid using Slint’s public placement rules directly.

Grid using Slint’s public placement rules directly.
Native app built from the example below.

Try the component

Download the complete project, extract it and run cargo run --locked in its folder. Rust 1.92+; Slint Kit 0.3.0 from crates.io. You can also copy the four files below.

Click Overview, Activity, Members, Settings: Rust handles the command and updates the action count.

ui/app.slint

export { KitFormValidation, HtmlInputKind, NumberInputFormat, KitInputConstraints, KitValidationResult, KitValidityState } from "@kit/kit.slint";
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitButton, KitGrid, KitTheme, KitThemes } from "@kit/kit.slint";

export enum DemoAction { overview, activity, members, settings }

export component App inherits Window {
    title: "KitGrid example";
    preferred-width: 420px;
    preferred-height: 230px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in property <string> status: "Choose an action.";
    callback action-requested(DemoAction);
    VerticalLayout {
        padding: 24px; spacing: 16px; alignment: start;
        Text { text: "Grid"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitGrid { Row { KitButton { theme: root.theme; text: "Overview"; activated => { root.action-requested(DemoAction.overview); } }KitButton { theme: root.theme; text: "Activity"; activated => { root.action-requested(DemoAction.activity); } } } Row { KitButton { theme: root.theme; text: "Members"; activated => { root.action-requested(DemoAction.members); } }KitButton { theme: root.theme; text: "Settings"; activated => { root.action-requested(DemoAction.settings); } } } }
        Text { text: root.status; color: root.theme.text-secondary; wrap: word-wrap; }
    }
}

src/main.rs

// SPDX-License-Identifier: GPL-3.0-or-later
use slint::ComponentHandle;
use std::cell::Cell;
slint::include_modules!();

fn main() -> Result<(), slint::PlatformError> {
    let app = App::new()?;
    slint_kit::init_form_validation!(self, app);
    let count = Cell::new(0_u32);
    let weak = app.as_weak();
    app.on_action_requested(move |action| {
        if let Some(app) = weak.upgrade() {
            let next = count.get().checked_add(1).expect("action count capacity");
            count.set(next);
            let label = match action {
                DemoAction::Overview => "Overview",
                DemoAction::Activity => "Activity",
                DemoAction::Members => "Members",
                DemoAction::Settings => "Settings",
            };
            app.set_status(format!("{label} handled by Rust ({next})").into());
        }
    });
    app.run()
}

Cargo.toml and build.rs

Cargo.toml

[package]
name = "slint-kit-grid-example"
version = "0.1.0"
edition = "2024"
rust-version = "1.92"
license = "GPL-3.0-or-later"
publish = false

[dependencies]
slint-kit = "=0.3.0"
slint = { version = "=1.18.1", default-features = false, features = ["std", "compat-1-18", "backend-winit", "renderer-skia", "accessibility"] }

[build-dependencies]
slint-kit-build = "=0.3.0"

[workspace]

build.rs

fn main() {
    slint_kit_build::compile("ui/app.slint").expect("compile component example");
}

Files: Cargo.toml · build.rs · ui/app.slint · src/main.rs

Declare Row, columns and cell spans at the use site. Set gap and inset to use kit spacing.

It inherits GridLayout and keeps a natural height. It does not automatically redistribute opaque children into columns.

Visual composition

The file below produces the screenshot. For controller-driven components, it shows the displayed state without supplying the Rust wiring. Create a project.

Show the screenshot source
Grid using Slint’s public placement rules directly.
Native screenshot of the same example, rendered with Skia.
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitButton, KitGrid, KitTheme, KitThemes } from "@kit/kit.slint";

export component Example inherits Window {
    title: "KitGrid example";
    preferred-width: 420px;
    preferred-height: 230px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in-out property <string> status;
    VerticalLayout {
        padding: 24px; spacing: 16px; alignment: start;
        Text { text: "Grid"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitGrid { Row { KitButton { theme: root.theme; text: "Overview"; activated => { root.status = "Action requested"; } }KitButton { theme: root.theme; text: "Activity"; activated => { root.status = "Action requested"; } } } Row { KitButton { theme: root.theme; text: "Members"; activated => { root.status = "Action requested"; } }KitButton { theme: root.theme; text: "Settings"; activated => { root.status = "Action requested"; } } } }
        if root.status != "": Text { text: root.status; color: root.theme.text-secondary; font-size: 12px * root.theme.text-scale; wrap: word-wrap; }
    }
}

Download this example

Public API

Inherits GridLayout.

Properties

Name Type Direction
gap LayoutSpace in
inset LayoutSpace in

Types and variants

Type Declaration
enum LayoutSpace none, tight, compact, regular, roomy, section

See also