{
id: _manager
repository: _repo
Component.onCompleted: loadMyData();
}
Repository и Manager это мои С++ классы, loadMyData - метод менеджера.
Внутри loadMyData у меня идёт обращение к repository (вызов вирт. метода), который не срабатывает, т.к. в qt_metacast передаётся мусор вместо имени класса.
Как можно это пофиксить?
При этом в отладчике смотрю указатель repository_ установился в правильный тип, но при вызове вирт. метода repository->foo() при заходе внутри почему то вызывается qt_metacast, которому передаётся мусор в параметр вместо строки. Это в дальнейшем приводит к падению. Короче, не понятно почему не работает
Manager собрался раньше репы, в чем вопрос то?
Как пофиксить?
самый лучший вариант - loadMyData() вызывать у менеджера в setRepository
OnCompleted parent-a использовать
Не вариант, имхо
А можете пояснить откуда там qt_metacast(const char*) вызывается, когда я нажимаю Step Into в отладчике на строчке: repository->virt_method();?
где-нибудь в static meta object или нагенереном moc ?
а почему нет? ну кроме того, что сеттер делает то, что от него не ожидаешь
Single responsibility
читай про moc и что он генерит
Мне бы понять как эта штука вызвалась при вызове вирт. метода
она вызвалась при вызове из qml
а проблема не может быть в самом айдишнике? Если убрать _ не сработает? Вроде внутри кумля нотацию с _ и используют, авось конфликт какой
по моему пол qml так работает
Может конечно отладчик фигню показывает, но я попадаю в этот метод при Step Into уже в loadData() в С++ коде
Не, не в этом проблема точно
У сеттера есть emit сигнала, в обработчике делай что хочешь
И по Call Stack вижу родительский фрейм - loadData в С++ коде
Call Stack покажи
Это не сработало, мб проблема в другом
все-равно осадок остался. есть объект. задача объекта - выгрузить данные из другого объекта. так почему-бы не выгрузить данные сразу в setter ? да, Single responsibility, но если объект специально для этого сделан
Вот это ещё позже попробую
не надо нагружать сеттеры левой деятельностью, для этого есть сигналы
так а смысл нагружать вызов сигналом ради вызова метода у самого себя?
короче, Макс, не делай вид, что ты меня не понял
нет. этот тот момент, который я действительно не понимаю
сеттер генеренный метод считай, наделять его дополнительной функциональностью нерационально. он умеет устанавливать новое значение свойства и оповещать об этом - в этом его назначение и единственная обязанность
Обсуждают сегодня