包含派生对象的QPointer与基类不匹配

chi*_*uba 1 c++ qt pointers qpointer

对于这个奇怪的标题感到抱歉,如果你能想到一个,请随时提出更好的标题.

这是我的问题.

我有一个看起来像这样的结构:

QObject - > MyBase - > MyDerived

然后我有一个函数将任何派生类型作为QPointer;

void function(QPointer<MyBase> base) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

问题是现在我无法QPointer<MyDerived>进入这个函数,如果我使用标准指针,我会这样做.我是否必须转换此对象以使其适合该功能?或者我应该只使用普通指针?

此外,当您分配失败的对象时,是否有人知道标准行为?你是否应该总是在try-block中执行此操作或将其包装在某个内容中以检查它是否为null?我阅读了Qt文档,他们说如果分配失败,他们的大多数类都会返回一个空值.该语句何时为true,如果我不想使用try-catch,我该怎么办?

Kun*_*nal 5

你应该使用普通指针.这就是Qt Document关于使用QPoiner的说法

"一个受保护的指针将自动转换为T*,因此你可以自由地混合有保护和无保护的指针.这意味着如果你有一个QPointer <QWidget>,你可以将它传递给一个需要QWidget*的函数.因此,声明函数将QPointer作为参数没有多大价值;*只需使用普通指针*.随着时间的推移存储指针时使用QPointer.