Skip to content

FluentPage ​

FluentPage is the standard content container in RinUI. It extends Qt Quick Page with consistent page titles, scrolling, content width, padding, and optional footers, making it suitable as the root of a NavigationView page.

FluentPage examples in light and dark themesFluentPage examples in light and dark themes

Basic Page ​

Basic Page
qml
import QtQuick
import QtQuick.Layouts
import RinUI

FluentPage {
    title: qsTr("Settings")

    Text {
        Layout.fillWidth: true
        typography: Typography.Body
        text: qsTr("Place page content here.")
    }

    SettingCard {
        Layout.fillWidth: true
        title: qsTr("Appearance")
        description: qsTr("Choose the application theme.")
        content: ComboBox {
            model: ["Auto", "Light", "Dark"]
        }
    }
}

The page body is laid out in an internal ColumnLayout, so layout attached properties such as Layout.fillWidth: true work directly.

Header Content ​

Setting title shows a consistent title row. extraHeaderItems places additional controls on the right side, while customHeader and contentHeader provide custom header content and content above the main body.

Header Content
qml
FluentPage {
    title: qsTr("Account")

    extraHeaderItems: Button {
        text: qsTr("Save")
    }

    contentHeader: Frame {
        width: parent.width
        height: 120

        Text {
            anchors.centerIn: parent
            text: qsTr("Account overview")
        }
    }
}

pageFooter maps to Qt Quick Page.footer and is useful for actions that stay at the bottom of the page:

Footer
qml
FluentPage {
    title: qsTr("Edit")

    pageFooter: Frame {
        height: 56

        Row {
            anchors.right: parent.right
            anchors.verticalCenter: parent.verticalCenter
            spacing: 8

            Button { text: qsTr("Cancel") }
            Button {
                highlighted: true
                text: qsTr("Save")
            }
        }
    }
}

A footer is not a replacement for a transient notification or popup. Use FloatLayer for temporary messages and contextual notices.

Content Width and Spacing ​

Pages default to wrapperWidth: 1000 and horizontalPadding: 56, constraining content to a readable width. contentSpacing controls the body column spacing, while spacing controls the page spacing.

Reduce the padding for narrow windows, or increase wrapperWidth for full-width content while keeping text lines readable:

Content Width and Spacing
qml
FluentPage {
    horizontalPadding: 24
    wrapperWidth: 1400
    contentSpacing: 18
}

## Key Properties

| Property | Default | Description |
| --- | --- | --- |
| `title` | `""` | Page title; the title row appears when non-empty. |
| `content` | default property | Main content container. |
| `contentHeader` | empty | Content shown above the main body. |
| `customHeader` | empty | Custom content inside the title row. |
| `extraHeaderItems` | empty | Additional controls on the right of the title row. |
| `pageFooter` | empty | Footer area. |
| `radius` | theme window radius | Page corner radius. |
| `wrapperWidth` | `1000` | Maximum content width. |
| `horizontalPadding` | `56` | Horizontal page padding. |
| `spacing` | `14` | Page spacing. |
| `contentSpacing` | body layout value | Spacing between content items. |

## Scrolling

`FluentPage` includes a vertical `Flickable` and scroll bar. Do not wrap the entire page in another unconstrained `Flickable`, which can produce nested scrolling. Let content take its normal height and allow `FluentPage` to handle long pages.

## Related Components

- [FluentWindow](/Windowing/FluentWindow): application window that hosts pages.
- [NavigationView](/Navigation/NavigationView): page switching and navigation history.
- [Frame](/ListAndCollections/Frame): grouping container for page content.