指向 QHash 的 QPointer
Posted
技术标签:
【中文标题】指向 QHash 的 QPointer【英文标题】:QPointer to QHash 【发布时间】:2012-12-02 11:10:12 【问题描述】:QPointer 可以和 QHash 一起使用吗?
QPointer<QHash<QString, QPointer<QStringList>> > pHash;
【问题讨论】:
我应该说代码可以编译,但我得到了奇怪的错误。 【参考方案1】:QPointer 只能与 QObject 子类一起使用。因此它不能与 QHash 或 QStringList 一起使用,因为两者都不是 QObject 的。如果上面的代码为您编译,那可能是因为您还没有使用 pHash?甚至初始化这样的 QPointer,例如
QPointer<QHash<QString, QString> > foo( new QHash<QString, QString>() );
给出如下错误(gcc):
error: cannot convert ‘QHash<QString, QString>*’ to ‘QObject*’ in initialization
如果您确实需要(智能)指向容器的指针,请尝试QSharedPointer,它不需要包含的对象是任何特定类型。 虽然通常在堆栈上创建容器,但在堆上创建它们是不习惯的,几乎在所有情况下都是不必要的。 Qt 的容器是implicitly shared,因此复制它们很便宜。
【讨论】:
+1 表示QPointer
只能与QObject
一起使用。 +1 QSharedPointer
替代品。并且 +1 用于发现容器是隐式共享的:)。
是的,当我尝试使用 pHash 时,我得到了错误。非常感谢您的好答案和替代方案。以上是关于指向 QHash 的 QPointer的主要内容,如果未能解决你的问题,请参考以下文章