【问题标题】:QML Applicationwindow resize stutterQML Applicationwindow 调整口吃大小
【发布时间】:2017-05-28 23:44:47
【问题描述】:

我遇到了一个问题,我希望是因为我不擅长 QML 编码,而不是因为 Qt 中的一些基本错误。

每当我在水平方向(宽度变化)调整应用程序窗口的大小时,窗口不会调整到我释放鼠标的位置,而是“捕捉”回它的最小宽度。我已设法将其简化为重现该错误的最基本要求。

  • 不松开鼠标会导致宽度在最小宽度和鼠标位置之间来回摆动。
  • 删除项目会删除错误
  • 如果长时间未释放鼠标(例如处于调整大小状态),垂直调整大小(改变高度)有时可能会导致应用程序崩溃
  • 因此几乎不可能调整大小

main.qml

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

ApplicationWindow {
    id: root
    visible: true
    minimumHeight: 768
    minimumWidth: 1024
    title: qsTr("Test")
    color: "#292525"

    Item {
        width: 0.9*parent.width
        height: 0.1*parent.height
    }
}

知道为什么会这样吗?

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    你有一种微妙的绑定循环形式。 QtQuickControls 的ApplicationWindow 尝试保持窗口内容的大小以匹配其中的内容,称为contentItemApplicationWindow 的所有子级都(无声地)重新设置为父级,但您正在将大小设置为您的内容取决于它所在的窗口。

    因此,您调整窗口大小,这会改变您的Item 的大小,这会改变contentItem 的大小,这会使ApplicationWindow 调整您的窗口大小(与您战斗)。

    这样的事情可能会奏效:

    import QtQuick 2.5
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.4
    
    ApplicationWindow {
        id: root
    
        visible: true
        minimumHeight: 768
        minimumWidth: 1024
        title: qsTr("Test")
        color: "#292525"
    
        // This item will just match the Window's size...
        Item {
            anchors.fill: parent
    
            // ... and here, we'll fill a part of it with a rectangle.
            Rectangle {
                color: "red"
                width: 0.9*parent.width
                height: 0.1*parent.height
            }
        }
    }
    

    【讨论】:

    • 谢谢罗宾,我不知道绑定循环。
    • 或挪威语,Takk :)
    • 裸hyggelig! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多