Я узнал из класса OOAD, что dynamic_cast - плохой дизайн , но я не знаю, как я могу сделать то, что хочу, без dynamic_cast в Qt , потому что я не могу просто полиморфизм в QGraphicsItem. Вот мой код.Qt/C++ Листинг QGraphicsItem для пользовательского QGraphicsItem без использования dynamic_cast
void Scene::changeName(){
QList<QGraphicsItem*> selecitems = this->selectedItems();
if(selectedItems().size()==1){
Base* object = dynamic_cast<Base*>(selecitems[0]);
bool isok;
if(object){
QString name = QInputDialog::getText(views().first()
, tr("Change object name")
, tr("Enter a name"),QLineEdit::Normal, "name", &isok);
if(isok){
object->setName(name);
}
}
}
}
Я хочу изменить имя элемента, если это базовый объект и его единственный выбранный.
И мне нужна функция «setName» в базовом классе. Есть ли способ сделать то, что я хочу, не используя dynamic_cast?
В нормальном состоянии, я буду просачивать функцию «SetName» в QGraphicsItem, , но кажется, что я не могу сделать это в Qt.
Просто, чтобы проверить, если я правильно понимаю: 'Base' является _derived_ от' QGraphicsItem' ?! – MSalters
Да, это правильно! – Richard