c++ - 包含派生对象的 QPointer 不会与基类匹配

标签 c++ qt pointers qpointer

抱歉标题有点奇怪,如果你能想到一个更好的,请随意想出一个。

这是我的问题。

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

QObject -> MyBase -> MyDerived

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

void function(QPointer<MyBase> base) {
   ...
}

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

还有,有谁知道分配对象失败时的标准行为吗?您应该始终在 try block 中执行此操作还是将其包装在某些东西中以检查它是否为空?我阅读了 Qt 文档,他们说如果分配失败,他们的大多数类都会返回空值。该声明何时为真?如果我不想使用 try-catch,我该怎么办?

最佳答案

你应该使用普通指针。这是 Qt 文档中关于使用 QPoiner 的说法

“ protected 指针会自动转换为 T *,因此您可以自由混合 protected 和不 protected 指针。这意味着如果您有 QPointer,则可以将其传递给需要 QWidget * 的函数。 因此,声明将 QPointer 作为参数的函数意义不大; *只需使用普通指针*。在存储指针时使用 QPointer随着时间的推移。”

关于c++ - 包含派生对象的 QPointer 不会与基类匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731516/

相关文章:

c++ - 如何在生产者-消费者场景中使用 Boost 条件变量?

c++ - C 或 C++ 中的协程?

c++ - FatFS - 无法格式化驱动器,FR_MKFS_ABORTED

c++ - 在 HTTP 中获取空响应在 QT QNetworkAccessManager 中获取请求

c++ - 我从 g++ 编译器收到此错误 - 从 ‘int*’ 到 ‘int’ 的无效转换 [-fpermissive]

c - 为什么在 C 中使用字符指针访问整型变量会导致仅截断为一个字节?

C++ 一头多源

c++ - Qt 在 Mac OSX 10.9 上的部署

qt - 如何在 Qt Symbian 上将图标放置在屏幕中央?

c++ - 带有函数回调的可变数量的参数(va_list)?