Элементы верхнего и нижнего колонтитулов QML ListView?

#qt #listview #qml

#qt #listview #qml

Вопрос:

Я хотел бы получить доступ к элементам верхнего и нижнего колонтитулов в QML ListView способом, аналогичным вызову currentItem для получения текущего экземпляра делегата, но я не могу понять, как. Я был бы признателен за любой совет.

Комментарии:

1. По какой-либо причине вы не можете получить доступ к header и footer свойствам так же, как к currentItem свойству? Чего вы пытаетесь достичь?

2. Я хотел рассчитать эффективную высоту содержимого ListView, включая динамические верхние / нижние колонтитулы / делегаты.

Ответ №1:

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

 Window {
  property Item listHeaderItem: null
  Component {
    id: listHeaderComponent
    Item {
      id: headerItem
      width: listView.width; height: 0
      Component.onCompleted: rootWindow.listHeaderItem = headerItem
    }
  }
  ListView {
    header: listHeaderComponent
  }}
  

Комментарии:

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

Ответ №2:

Вы можете получить доступ к объектам верхнего и нижнего колонтитулов с помощью функции, подобной…

         if(header)
        {
            var headerItem = header.createObject(null);
            // do stuff with headerItem
            headerItem.destroy();
        }
        if(footer)
        {
            var footerItem = footer.createObject(null);
            // do stuff with footerItem
            footerItem.destroy();
        }