LINUX.ORG.RU

приведение типов: QAbstractItemModel в MyTreeModel


0

1

Загодя посыпаю голову пеплом, ссылаясь на слабину в плюсах, но тем не менее.

Имеется кастомная class MyTreeModel : public QAbstractItemModel

Эту модель цепляю: ui->treeView->setModel(myTreeModel);

Потом хочу аля MyTreeModel *myTreeModel = ui->treeView->model(), но не взлетает.

Как выполнить приведение типов? Что я делаю неправильно и какие слова отдать в поисковик?

★★★★★

Последнее исправление: VladimirMalyk (всего исправлений: 1)

Страуса открой, да посмотри.

anonymous
()
Ответ на: комментарий от Torvus

взлетело.
почему-то я был уверен что я это уже пробовал и что оно не работает - в результате гуглил богвесть что.

VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от VladimirMalyk

> в примерах из офф документации чаще static_cast

Ну тут выбор между уверенностью в том, что за всем уследишь, и желанием не закладывать мины тем, кому доведётся дебажить твои сегфолты позже :) Можно вообще везде, где уверен в справедливости приведения, использовать вариант dynamic_cast<Derived&>(), хотя это лишний тормоз, конечно.

const86 ★★★★★
()

а чо не переопределить/перекрыть model у себя с ковариантным возвращаемым типом дергать внутри метод папы с одним кастом внутри со свободным от кастов по всему коду в дальнейшем ?

anonymous
()
Ответ на: комментарий от anonymous

> а чо не переопределить/перекрыть model у себя с ковариантным возвращаемым типом дергать внутри метод папы с одним кастом внутри со свободным от кастов по всему коду в дальнейшем ?

а чо запятые не ставить читать непонятно забанить по айпи нельзя помиловать ?

anonymous
()
Ответ на: комментарий от const86

Для этого и созданы ассерты:

Q_ASSERT(dynamic_cast<MyModel *>(myTreeView->model()) && "model has wrong type");
MyModel * m = static_cast<MyModel *>(myTreeView->model());
anonymous
()
Ответ на: комментарий от VladimirMalyk

дык а какие проблемы к папе все неявно будет приводится если папа в множественном наследовании (если оно есть) не второй то даже уквазатель менятся не будет

anonymous
()
Ответ на: комментарий от anonymous

оно и приводилось, до пока мне не понадобился самопальный паблик метод сына.
и тут я с какого-то решил что MyTreeModel *myTreeModel = static_cast<MyTreeModel*>( ui->treeView->model()) не работает и начал гуглить что нипопадя

VladimirMalyk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.