2013-02-19 3 views
1

Я действительно новичок в QML, и я борюсь с определением базового макета в QML. Как вы привязываете элемент к окну, так что он изменяется при изменении размера окна пользователем? Я хочу добавить Rectangle, который заполняет все пространство, доступное в окне, но я не нашел способ сделать это изнутри qml-файла. Все примеры, которые я нашел до сих пор, используют ширину и высоту исправления, но это означает, что элемент будет сохранять свой размер предустановки при изменении размера окна.Якорный элемент QML для окна

ответ

3

Для конкретной задачи:

  1. Anchor всех элементов на основе их родителей (братья и сестры).
  2. Всегда делайте свой верхний элемент qml, чтобы заполнить пространство зрителя, как описано here.

Добавление к нему. Всякий раз, когда вам требуется такое изменение размера, вам нужно сообщить с одной стороны в другую об изменении геометрии. По бокам я имею в виду от qml до C++ или от C++ до qml.

Рассказывать QML об изменении размера в верхней части окна:

Ваш верхний родительский элемент в QML не получит какой-либо сигнал о изменении размера виджета. Вам нужно сделать это вручную.

  1. Чтобы получить информацию о том, верхний виджет фактически повторно размера, вам нужно реализовать функцию resizeEvent.

  2. Всякий раз, когда вы вызываете свою реализацию, вам нужно сообщить стороне qml, что произошло какое-то изменение размера, и поэтому верхний родитель qml также должен изменить размер.

Рассказывать C++ об изменении размера в верхнем элементе QML:

Точно так же, ваш виджет в C++ не получит какой-либо сигнал о изменении размера верхнего элемента QML. Вам необходимо сделать это вручную:

  1. Открыть класс от C++ до qml.
  2. Когда элемент top qml изменяется, вызовите функцию этого класса, чтобы сообщить об этом изменении, и попросите также изменить размер верхнего виджета.

Вы можете получить общее представление об этих подходах here и here.

1

Простой ответ на это состоит в использовании

Item { 
    anchors.fill: parent 
} 

который equivelent к

Item { 
    anchors { 
    top: parent.top 
    left: parent.left 
    right: parent.right 
    bottom: parent.bottom 
    } 
} 

где родитель объект, который вы хотите деталь быть закреплен внутри. Хотя это, как правило, родитель, он может технически быть привязан ко всему.

Я хочу добавить, что обычно вы статически оцениваете элемент верхнего уровня, поскольку с параметрами по умолчанию в приложении qml окно приложения будет иметь размер корневого элемента в вашем основном qml-файле. Если вы хотите сделать что-то более сложное, вам нужно будет изменить C++, который генерирует QDeclarativeView для вашего приложения.

+1

Это правильно для элементов внутри других элементов, но для изменения размера корневого элемента при изменении размера окна мне пришлось установить режим изменения размера QDeclarativeView в SizeRootObjectToView – svb

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