我正在尝试在 Qt 中编写一个运行相对良好的应用程序,直到我遇到了这个愚蠢的问题。我有一个Node
类,它可以有一个指向Workplace
类实例的指针。我还为该指针定义了 getter/setter 方法。像这样的东西:
class Node : public QGraphicsItem
{
Q_DECLARE_TR_FUNCTIONS(Node)
public:
Node(const QString &type, Project* nodeProject);
~Node();
void setWorkplace(Workplace* workplace);
void removeWorkplace();
Workplace* usedWorkplace();
(...)
private:
Workplace* myWorkplace;
}
因此,现在在我的代码中,我必须检查某个特定对象Node
是否具有指向已Workplace
定义对象的指针,以便对该信息进行一些操作。这就是我的做法:
Workplace* currentWorkplacePointer = qobject_cast<Workplace*>(node->usedWorkplace());
if(!currentWorkplacePointer){
// no workplace, do some stuff
}else{
// workplace exists, do other stuff
}
这工作得很好,但现在由于某种原因它随机分段故障。我说随机是因为有时,如果我尝试清理和重建项目,它会正常工作 - 即,qobject_cast
失败会静默失败并按我的预期进行;其他时候,即使我清理/重建,它也会再次出现段错误。
调试器控制台始终指向我上面代码中的对象转换行。据我所知,如果投射的对象不存在,投射不应该只是默默地失败吗?
请注意,我对 Qt/C++ 还很陌生,因此感谢您提供任何帮助和意见 - 请保持温和!:) 提前致谢!