Название: QAbstractItemModel - layoutChanged, reset Отправлено: spectre71 от Июнь 22, 2009, 10:13 Не могу понять в чем приципиальная разница между emit layoutChanged() и reset()
Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: spectre71 от Июнь 22, 2009, 10:28 Задача на самом деле такая:
Есть наследованная модель. Есть метод initialize(MyData...) 1) в методе initialize в определенный момент необходимо заблокировать работу с данными модели, поскольку некоторые указатели во время переинициализации могут быть невалидными. 2) Сообщить View что модель изменилась. думал что сделаю так: initialize(...) { emit modelAboutToBeReset(); ..... ..... emit modelReset(); } Но данные сигналы в привате(хотя в доке про это ничего нет, явная ошибка либо в доке либо в коде!) Можно ли использовать в моем случае: layoutAboutToBeChanged () layoutChanged () или это не безопасно. Как сделать правильно? Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: Barmaglodd от Июнь 22, 2009, 10:55 Почему в привате? От какого класса наследовались? Я при наследовании от QAbstractItemModel, QAbstractListModel, QAbstractITableModel без проблем их использую.
Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: spectre71 от Июнь 22, 2009, 11:01 Почему в привате? От какого класса наследовались? Я при наследовании от QAbstractItemModel, QAbstractListModel, QAbstractITableModel без проблем их использую. Код
QT 4.5.1/Windows Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: Barmaglodd от Июнь 22, 2009, 11:07 А тьфу, точно! :) А почему нельзя reset() после изменения использовать?
Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: spectre71 от Июнь 22, 2009, 11:15 А тьфу, точно! :) А почему нельзя reset() после изменения использовать? А если многопоточность? Пока я буду обновлять данные, View из другого потока захочет чего-то запросить у модели, а указатели невалидны!А ставить везде блокировки в комбинации с методами ...begin..."/ "...end..." - маразм. Я так понял что все методы и сигналы "...begin..."/"...end..." и служат в основном для этого, иначе в них мало толку. Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: Rcus от Июнь 22, 2009, 11:34 Вдруг не то слово... ВНЕЗАПНО!
Мне интересно стало, модель может нормально существовать в другом потоке? Потому что насколько я умею читать представления полагаются на синхронную доставку сигналов. Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: Barmaglodd от Июнь 22, 2009, 11:41 А если я подключусь после modelAboutToBeReset(), но до modelReset(), и начну к модели обращаться? Может стоит по запросу заполнить внутренние структуры модели, а, когда они уже заполнены, переключиться на их использование, и вызвать reset()?
@Rcus Никогда не задумывался, т.к. с многопоточными приложениями не работал, но тоже интересно. Название: Re: QAbstractItemModel - layoutChanged, reset Отправлено: spectre71 от Июнь 22, 2009, 12:12 А если я подключусь после modelAboutToBeReset(), но до modelReset(), и начну к модели обращаться? Может стоит по запросу заполнить внутренние структуры модели, а, когда они уже заполнены, переключиться на их использование, и вызвать reset()? Такие фокусы не проходят. Даже для изменения значения пременной типа указателя или int, которые используются в разный потоках используется блокировка. Поскольку в общем случае присваевание/чтение это не однотактовые операции и посреди оперции система может перключиться на другой поток, который к примеру попытается прочитать, то что находится на середине стадии присваивания :o@Rcus Никогда не задумывался, т.к. с многопоточными приложениями не работал, но тоже интересно. Ну примерно так. Возможно с однотактовостью я намудрил, а скорее несколько процессорных операций. |