2017-01-13 4 views
2

У меня возникла проблема, на которую я надеюсь, потому что я плохо разбираюсь в QML и не из-за какой-то фундаментальной ошибки в Qt.QML Applicationwindow resize stutter

Всякий раз, когда я изменяю размер окна приложения в горизонтальном направлении (изменение ширины), окно не изменяется до того места, где я отпираю мышь, но «привязывается» к его минимальной ширине. Мне удалось разбить его на самые основные требования к воспроизведению ошибки.

  • Не выпуская мышь, заставляет ширину танцевать взад и вперед между минимальной шириной и тем, где находится мышь.
  • Удаление элемента удаляет ошибку
  • Изменения размера по вертикали (изменение высоты), может иногда происходит сбой приложения, если мышь не освобождаются в течение длительного времени (например, находится в состоянии изменения размера)
  • Это практически невозможно изменить размер из-за этого

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 
    } 
} 

Любая идея, почему это происходит?

ответ

5

У вас есть форма тонкой петли привязки. QtQuickControls 'ApplicationWindow пытается сохранить размер содержимого окна в соответствии с содержимым содержимого внутри него, которое называется contentItem, которое все дети из ApplicationWindow (молча) повторно вошли в систему, но размер вашего контента зависит от окна что он проживает в.

Таким образом, вы измените размер окна, которое изменяет размер вашей 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 
     } 
    } 
} 
+0

Спасибо Робин, я не знал об обязательности цикла. – arynaq

+0

Или в норвежском, Takk :) – arynaq

+0

Bare hyggelig! :) –

Смежные вопросы