2015-04-30 2 views
0

У меня возникла небольшая проблема с проектом QML/C++. Я использую повторитель, чтобы нарисовать точки внутри прямоугольника, и эти точки взяты из модели. Вот мой код:Повторитель частичного обновления QML

main.qml

Rectangle { 
     id: rect 
     height:500 
     width:500 
     Repeater { 
      id: pointsRepeater 
      model: qListPoints 
      Point { 
      } 
     } 
} 

qListPoints родом из моего C++, где я писал: Q_PROPERTY(QVariant qListPoints READ getListPoints NOTIFY listPointsChanged)

Так в основном, когда я добавить или обновить точку списка я испускают listPointsChanged() и мой main.qml перерисовывает новые или обновленные точки из списка. Моя проблема в том, что когда я добавляю точки в свой список, и я испускаю listPointsChanged(), все точки перерисовываются, это похоже на медленный эффект строба. Я хочу, чтобы только новый пункт перерисовывал. Является ли это возможным ?

Заранее спасибо.

+0

Что содержит qListPoints? – Mitch

+0

Он содержит QList , где QObjects из класса Point – Hypnostick

ответ

1

Я думаю, что если бы вы использовали надлежащую модель, полученную из QAbstractListModel, то, например, будут перерисованы только те точки, которые вы добавляете/изменяете/удаляете. Проблема, которую вы видите, вероятно, такой же, как один упоминалось here:

Примечание: Там нет никакого способа для зрения, чтобы знать, что содержимое QList изменилось. Если QList изменяется, необходимо сбросить модель, снова вызвав QQmlContext :: setContextProperty().

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

Using C++ Models with Qt Quick Views Дополнительная информация по этому вопросу.

+0

Как получить доступ к моим атрибутам класса точек из загрузки файла Point.qml в ретрансляторе с помощью QAbstractListModel. В настоящее время я использую modelData.posX, например, будет ли он работать с QAbstractListModel? – Hypnostick

+0

Вы должны иметь доступ к свойствам через имена ролей, которые вы определяете в своей модели на C++: http://doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html#models – Mitch

+0

Хорошо спасибо чуваку. Я посмотрю на QAbstractListModel. Держите вас в курсе. Спасибо за ваше время – Hypnostick