Можно ли внутренне изменить данные модели перед отображением представлений?

Можно ли внутренне изменить данные модели перед отображением представлений? Например

struct MainWindow : QMainWindow
{
MainWindow()
{
mTreeView->setModel(mModel);
mModel->appendChild(...); // No beginInsertRows() and similars are called
}
};

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

1

Решение

Когда модель уже подключена к одному или нескольким представлениям, я настоятельно рекомендую вызвать соответствующий begin... а также end... методы до и после модификации модели. Эти функции излучают сигналы, которые подключенные представления (или прокси) должны обрабатывать до и после изменения данных. В противном случае представления могут оказаться в недопустимом состоянии.
Когда никакие представления (или прокси) не подключены, это можно сделать безопасно.

1

Другие решения

Это нормально, по крайней мере, ваша программа не потерпит крах. Однако, когда вы добавляете новые элементы в модель так, как вы показываете в своем примере, ваше представление не будет отображать обновление, особенно если вы не используете beginInsertRows ().
Если вы хотите, чтобы представление правильно отображало фактические данные, попробуйте установить модель после того, как вы вставите в нее элементы. В противном случае вам нужно будет вызвать beginInsertRows () и endInsertRows () в вашем классе модели.

0

По вопросам рекламы [email protected]