QML WindowApplication странное поведение размеров с SplitView при настройке панели инструментов окна - PullRequest
0 голосов
/ 27 сентября 2018

Я застрял с этой основной проблемой в QML.Я должен сказать, что даже если я уже работал с Qt, я новичок в QML.

Я определяю вертикальный SplitView в ApplicationWindow и пытаюсь установить высоту нижнего вида в процентах отвысота окнаЭто работает нормально, пока я не установил панель инструментов окна.Когда я делаю это, высота дна просто равна нулю.

После попытки некоторых обходных путей мне удалось показать это, добавив дополнительное значение, которое должно быть больше, чем процент, умноженный на высоту панели инструментов (46 пикселей на моемэкран).

Это действительно странно для меня и совсем не очевидно.Похоже, что QML не пересчитывает высоту вида снизу, если он обнуляет инициализацию, но делает это хорошо, если при инициализации он больше нуля (работает даже с 0,01 пикселями ...).

Мой код:

import QtQuick 2.0
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1

ApplicationWindow {
    id: mainWindow
    width: 640; height:480

    toolBar: ToolBar {}

    SplitView {
        orientation: Qt.Vertical
        anchors.fill: parent

        Component.onCompleted: { print("Split view: " + width + "x" + height) }
        onHeightChanged: print("Split view: " + width + "x" + height)

        Rectangle {
            Layout.fillHeight: true
            Text {
                text: "Top"
                anchors.centerIn: parent
            }
        }

        Rectangle {
            height: 0.1 * parent.height
            Text {
                text: "Bottom"
                anchors.centerIn: parent
            }

            Component.onCompleted: { print("Bottom: " + width + "x" + height + " (parent " + parent.height + ")") }
            onHeightChanged: print("Bottom: " + width + "x" + height + " (parent " + parent.height + ")")
        }
    }

}

Спасибо, если у кого-нибудь есть идея написать это правильно (если это не ошибка Qt ...).

1 Ответ

0 голосов
/ 27 сентября 2018

Кажется, что это ошибка, обходной путь заключается не в использовании якорей, а в простом вычислении:

import QtQuick 2.0
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1

ApplicationWindow {
    id: mainWindow
    width: 640; height:480
    visible: true

    toolBar: ToolBar {
        id: toolbar
    }

    SplitView {
        height: mainWindow.height - toolBar.height // <----
        width: mainWindow.width // <----

        orientation: Qt.Vertical
        Rectangle {
            Layout.fillHeight: true
            Text {
                text: "Top"
                anchors.centerIn: parent
            }
        }
        Rectangle {
            height: 0.1 * parent.height
            Text {
                text: "Bottom"
                anchors.centerIn: parent
            }
        }
    }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...