Phrogz
Phrogz

Reputation: 303198

Adjusting QML RowLayout attached properties

I am attempting a simple RowLayout of Rectangles. (See code below.) When I attempt to compile/run this in Qt Creator, I get:

qrc:/main.qml:31 Do not create objects of type Layout

when I attempt to use either Layout.minimumWidth:200 or Layout { minimumWidth:200 }

The Qt documentation for RowLayout shows the first form working. What am I missing?

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3

ApplicationWindow {
    id: window
    title: "RB3Jay"
    width:1280; height:960
    minimumWidth:600; minimumHeight:300
    visible: true

    Rectangle {
        id: pseudocontent
        height: parent.height - (header.height + footer.height)
        color:'orange'
        anchors {
          top:header.bottom
          bottom:footer.top
          left:parent.left
          right:parent.right
        }
    }

    header: RowLayout {
        id: header
        spacing: 0
        height: 100
        width: parent.width
        Rectangle {
            color:'red'
            Layout {
                minimumWidth:200; maximumWidth:200; preferredWidth:200
                fillHeight:true
            }
        }
        Rectangle {
            color:'green'
            Layout {
                minimumWidth: 200
                preferredWidth: parent.width*0.7
                fillWidth:true; fillHeight:true
            }
        }
        Rectangle {
            color:'blue'
            Layout {
                minimumWidth: 200
                preferredWidth: parent.width*0.3
                fillWidth:true; fillHeight:true
            }
        }
    }

    footer: Inspector {
        id: footer
        height:100
    }
}

Upvotes: 3

Views: 1125

Answers (1)

jpnurmi
jpnurmi

Reputation: 5836

While the foo { bar: 1; baz: 2 } -syntax works for grouped properties, Foo { } is reserved for creating an instance of QML type Foo. For attached properties, you must use the Foo.bar: 1 -syntax.

Layout is not a creatable type, it only provides attached properties. Therefore you must use the Foo.bar: 1 -syntax.

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3

ApplicationWindow {
    id: window
    title: "RB3Jay"
    width:1280; height:960
    minimumWidth:600; minimumHeight:300
    visible: true

    Rectangle {
        id: pseudocontent
        height: parent.height - (header.height + footer.height)
        color:'orange'
        anchors {
          top:header.bottom
          bottom:footer.top
          left:parent.left
          right:parent.right
        }
    }

    header: RowLayout {
        id: header
        spacing: 0
        height: 100
        width: parent.width
        Rectangle {
            color:'red'
            Layout.minimumWidth:200
            Layout.maximumWidth:200
            Layout.preferredWidth:200
            Layout.fillHeight:true
        }
        Rectangle {
            color:'green'
            Layout.minimumWidth: 200
            Layout.preferredWidth: parent.width*0.7
            Layout.fillWidth:true; Layout.fillHeight:true
        }
        Rectangle {
            color:'blue'
            Layout.minimumWidth: 200
            Layout.preferredWidth: parent.width*0.3
            Layout.fillWidth:true; Layout.fillHeight:true
        }
    }

    footer: Inspector {
        id: footer
        height:100
    }
}

Upvotes: 3

Related Questions