Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qlewer от Май 29, 2020, 13:17



Название: переобъявить переменную
Отправлено: qlewer от Май 29, 2020, 13:17
имеется переменная model, которая, в зависимости от состояния переключателя, может быть QSqlQueryModel или QStandardItemModel. как в коде переобъявить переменную под нужный тип? такая конструкция не работает:
Код:
QVariant *model;
if(ui->checkBox->isChecked()){
        model=new QSqlQueryModel();
    }else{
        model = new QStandardItemModel();
    }


Название: Re: переобъявить переменную
Отправлено: tux от Май 29, 2020, 14:02
Сурово. Одно наследуется от QAbstractItemModel, другое от QAbstractTableModel.
В принципе можно использовать
Код:
QAbstractItemModel *model;
, но как по мне - это изврат. Проще переделать архитектуру проекта.


Название: Re: переобъявить переменную
Отправлено: ViTech от Май 29, 2020, 14:05
Бьерн Страуструп: "Язык программирования С++", "6.2 Производные классы".
Указатели и ссылки на производные типы (http://www.c-cpp.ru/books/ukazateli-i-ssylki-na-proizvodnye-tipy).


Название: Re: переобъявить переменную
Отправлено: Igors от Май 29, 2020, 16:56
Проще переделать архитектуру проекта.
Эта популярная дежурная фраза обычно (или никогда) никакой смысловой нагрузки не несет  :)

Почему не PIMPL и все такое? Здесь умничание вроде к месту


Название: Re: переобъявить переменную
Отправлено: navrocky от Май 29, 2020, 18:30
имеется переменная model, которая, в зависимости от состояния переключателя, может быть QSqlQueryModel или QStandardItemModel. как в коде переобъявить переменную под нужный тип? такая конструкция не работает:
Код:
QVariant *model;
if(ui->checkBox->isChecked()){
        model=new QSqlQueryModel();
    }else{
        model = new QStandardItemModel();
    }

А что дальше ты с этой моделью планируешь делать?

А так просто замени свой странный QVariant* на QAbstractItemModel*

И рекомендую, чтобы больше не задавать таких вопросов, ознакомиться с наследованием в C++, внимательно вглядеться в документацию по Qt, для каждого класса указывается цепочка его предков. Также обязательно почитай что такое QVariant и как его использовать.


Название: Re: переобъявить переменную
Отправлено: tux от Май 30, 2020, 00:56
Эта популярная дежурная фраза обычно (или никогда) никакой смысловой нагрузки не несет  :)
Ну мало ли что задумал ТС. Но одна общая переменная для двух разных классов - явно плохая архитектура. Хотя, может ТС любит неявные баги ловить. :)