[英]Qt/C++ Cast QGraphicsItem to custom QGraphicsItem without using dynamic_cast
我从OOAD类中学到,dynamic_cast是一个糟糕的设计,但是我不知道在Qt中没有dynamic_cast怎么办我想做的事情,因为我不能只在QGraphicsItem中做多态。 这是我的代码。
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就可以做我想做的事吗?
在正常情况下,我将在QGraphicsItem中渗透函数“ SetName”,但似乎无法在Qt中做到这一点。
Qt对于QGraphicsItem
具有自己的转换功能: qgraphicsitem_cast
。 从文档中:
T qgraphicsitem_cast(QGraphicsItem *项目)
如果项目为T类型,则返回给定的类型转换为T的项目; 否则,返回0。
注意:要使此函数与自定义项一起正常工作,请为每个自定义QGraphicsItem子类重新实现type()函数。
另一个需要注意的是,糟糕的设计很糟糕,但是dynamic_cast
糟糕程度取决于您使用它的方式:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.