gpt4 book ai didi

c++ - Qt/C++ 在不使用 dynamic_cast 的情况下将 QGraphicsItem 转换为自定义 QGraphicsItem

转载 作者:行者123 更新时间:2023-11-30 02:34:09 24 4
gpt4 key购买 nike

我从 OOAD 类(class)中了解到 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);
}
}
}
}

我想更改一个项目的名称,如果它是一个 Base 对象并且它是唯一被选中的对象。

我需要基类中的函数“setName”。有没有办法在不使用 dynamic_cast 的情况下做我想做的事?

在正常情况下,我将在 QGraphicsItem 中渗透函数“SetName”,但似乎我无法在 Qt 中执行此操作。

最佳答案

Qt 有自己的QGraphicsItem 转换函数:qgraphicsitem_cast。来自文档:

T qgraphicsitem_cast(QGraphicsItem * item)

Returns the given item cast to type T if item is of type T; otherwise, 0 is returned.

Note: To make this function work correctly with custom items, reimplement the type() function for each custom QGraphicsItem subclass.

另一方面,糟糕的设计是糟糕的,但是 dynamic_cast 有多糟糕取决于你如何使用它:-)

关于c++ - Qt/C++ 在不使用 dynamic_cast 的情况下将 QGraphicsItem 转换为自定义 QGraphicsItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com